docker:挂载/var/run/docker.sock后未找到

时间:2019-03-23 15:47:54

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

我正在尝试在容器内使用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。请帮忙。

1 个答案:

答案 0 :(得分:4)

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

可执行文件(docker CLI)很轻巧,并使用/var/run/docker.sock访问守护程序(默认情况下,实际上有不同的传输方式)。

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

结论

在容器内安装Docker CLI,共享套接字并享用。但是在使用主机的docker守护程序时,您可能会与绑定挂载卷混淆,因为守护程序看不到容器的内部文件系统。