【问题标题】:docker: not found after mounting /var/run/docker.sockdocker:挂载/var/run/docker.sock后找不到
【发布时间】:2019-08-14 09:06:41
【问题描述】:

我正在尝试在容器内使用 docker 命令。 我使用此命令挂载 /var/run/docker.sock 并运行容器

docker run -d --name gitlab-runner --restart always \                                                                  
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

但是当我尝试在容器内使用 docker(gitlab-runner) 时出现错误

docker: not found

主持人:

srw-rw----  1 root docker    0 Mar 23 15:13 docker.sock

容器:

0 srw-rw---- 1 root gitlab-runner    0 Mar 23 15:13 docker.sock

这很好,在我删除旧容器并创建新容器之前,现在我无法在容器内运行 docker。请帮忙。

【问题讨论】:

  • docker安装在什么路径?您可以使用完整路径调用它吗?
  • 看起来 GitLab runner 使用docker-machine(安装在此图像中)来自动缩放运行器,这可能就是您必须在其中安装 docker.sock 套接字的原因。但是,我没有看到docker 本身安装在此映像中,甚至找不到它所在的适当修订版。因此,看起来docker: not found预期的结果。如果这对您以前有用,我想您在正在运行的容器中进行了一些手动自定义(例如手动安装 docker)并忘记了这一点,因此容器重新启动会擦除所有这些更改。

标签: docker gitlab-ci gitlab-ci-runner


【解决方案1】:

您应该区分 docker daemon 和 docker CLI。第一个是服务,它实际上执行所有工作——构建和运行容器。第二个是可执行文件,用于向守护进程发送命令

Executable (docker CLI) 是轻量级的,使用/var/run/docker.sock 访问守护进程(默认情况下,实际上有不同的传输)。

当您使用-v /var/run/docker.sock:/var/run/docker.sock 启动您的容器时,您实际上将您主机的 docker 守护进程共享到容器中的docker CLI。因此,您仍然需要在容器内安装 docker CLI 才能使用 Docker,但您不需要在内部设置守护程序(这非常复杂,需要特权模式)。

结论

在容器内安装 docker CLI,共享套接字并享受。但是在使用主机的 docker daemon 时,您可能会对绑定挂载卷感到困惑,因为 daemon 看不到容器的内部文件系统。

【讨论】:

猜你喜欢
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2020-01-03
  • 2019-09-27
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多