docker - docker:挂载/var/run/docker.sock后找不到
问题描述
我正在尝试在容器内使用 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 daemon 和 docker CLI。第一个是服务,它实际上执行所有工作——构建和运行容器。第二个是可执行文件,用于向 daemon 发送命令。
可执行文件(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 看不到容器的内部文件系统。
推荐阅读
- linux - 在 minion 上运行 highstate 时出错“未找到顶级文件或外部数据匹配”
- python - 如何添加这个 mayavi 3d 图的涟漪?
- java - 在 Spring Boot 和 Angular 应用程序中分块发送数据
- c# - c# FileSystemWatcher 在一段时间后停止触发事件
- spring-boot - 当 API 中未发送必填字段值时,如何在 swagger 中自定义错误消息?
- java - 更新到 Android Studio 3.2 后,Gradle 构建卡住并且永远不会完成
- java - 将字节数组转换为字符串 Java
- python - Python投资计算器
- c# - C# 使用代码文件时访问类
- c# - Marvin.JsonPatch 无法识别 PATCH 请求