Docker (DinD & ssh遇到的问题)

110 阅读1分钟

Docker (DinD & ssh遇到的问题)

  • Docker outside of Dockerrootdind--privileged/usr/sbin/initdocker 容器 ssh
  • 想通过DooD的方式让容器内部直接使用外部的docker.sock遇到的问题
  • docker内部使用docker、连接docker内部ssh 遇到的问题

网络上很容易查询到:

  1. 容器内部使用外部docker的守护进程的方法

    # 将外部的docker.sock 挂载到内部的 docker.sock
    docker run -v /var/run/docker.sock:/var/run/docker.sock -d [image_name]  /bin/bash
    
  2. 容器内开启root用户权限、使用systemctl

    # 使用 --privileged  参数和 /usr/sbin/init
    docker run --privileged -d [image_name] /usr/sbin/init
    

当两者共同使用时,会发现docker.sock进程的挂载没有效果了

# 使用 --privileged  参数和 /usr/sbin/init
docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock -d [image_name] /usr/sbin/init

应该是使能systemctl会使得挂载完 /var/run/docker.sock 之后又在相同位置mount 了一个tmpfs,导致先前挂载的文件都看不见了。

可以把host的/var/run/docker.sock 先挂载到一个其他位置,保证不会被覆盖掉,随后再到container的/var/run里去做一个symbol link,链接到挂载进来的docker.sock

# 运行
docker run --privileged -v /var/run/docker.sock:/temp/docker.sock -d [image_name] /usr/sbin/init
# 进入容器
docker exec -it [container] /bin/bash
# 执行软连接
ln -s /temp/docker.sock /var/run/docker.sock
# 查看docker.sock是否有效
docker ps