Docker in Docker(Dind)
Docker in Docker(Dind)
使用 Docker-in-Docker (dind):
。系统 root 密码为 2020:
docker run --gpus all -v E:/yyp/soft/sc/pytorch:/home/yyp/pytorch -v /var/run/docker.sock:/var/run/docker.sock --ipc=host --privileged -it -p 2121:2020 -p 8310:8888 -p 8612:8889 -p 1127:22 -p 8411:8889 -p 8869:8890 -p 9994:9993 -p 1088:23 --entrypoint /bin/bash registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1
###在宿主机上重新启动一个特权容器,并集成DinD
如果 vault.centos.org 仍不可用,尝试其他可靠的镜像源(如阿里云或华为云):
备份原配置文件
Bash
深色版本
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
下载并配置阿里云镜像源
Bash
深色版本
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清除缓存并重试安装
Bash
深色版本
yum clean all
yum makecache
yum install -y lvm2 parted device-mapper-persistent-data libnl
yum install -y docker
在宿主机终端运行:
####docker run -d --name dind --privileged docker:dind
###[root@b71fc7e01bda /]# docker run -v E:/yyp/soft/sc/pytorch:/home/yyp/pytorch -v /var/run/docker.sock:/var/run/docker.sock --volumes-from dind --privileged -it -p 2100:2020 -p 8589:8888 -p 22:22 --entrypoint /bin/bash registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1
####[root@93cc8a93f8ef /]#若需主机网络访问,可添加 --net=host(但可能降低隔离性)。 ###上面加入了 22 看看能不能成
直接改为进行运行::
docker run -v E:/yyp/soft/sc/pytorch:/home/yyp/pytorch -v /var/run/docker.sock:/var/run/docker.sock --privileged -it -p 2100:2020 -p 8589:8888 --entrypoint /bin/bash registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1
–volumes-from 是 Docker 的一个参数,用于让新创建的容器复用另一个容器的数据卷(Data Volumes)。具体到你的场景中,–volumes-from dind 表示新容器会继承名为 dind 的容器的所有数据卷配置。
在宿主机上开放端口(如使用 firewalld) 可以不用管
###sudo firewall-cmd --permanent --add-port=2100/tcp
###sudo firewall-cmd --permanent --add-port=8589/tcp
###sudo firewall-cmd --reload
curl -s https://install.zerotier.com |
添加root权限和9993端口
##docker run -it --privileged --rm -p 9993:9993 zt /bin/bash
为 Docker 不支持直接动态修改已运行容器的端口映射
-p 9994:9993
curl -s https://install.zerotier.com | bash
不必要再window 上的linux(docker destop) 内重复安装 zerotier!!! 直接用就行了 192.168.1.33
C:\Users\dell>ping 192.168.1.33
正在 Ping 192.168.1.33 具有 32 字节的数据:
来自 192.168.1.33 的回复: 字节=32 时间<1ms TTL=64
1127:22
ssh root@192.168.1.33 -p 1127
192.168.1.121/24
ssh root@192.168.1.121 -p 1127
[root@683148a82b0f /]# systemctl status sshd # Linux 系统
Failed to get D-Bus connection: Operation not permitted
[root@683148a82b0f /]#
yum install openssh-server
[root@683148a82b0f /]# systemctl start sshd
Failed to get D-Bus connection: Operation not permitted
[root@683148a82b0f /]# pkill sshd && /usr/sbin/sshd -D
[root@683148a82b0f /]#
vi /etc/ssh/sshd_config
- 直接运行 SSH 服务(推荐)
在 Docker 容器中,通常不需要 systemd,可以直接运行 sshd 守护进程:
bash
/usr/sbin/sshd -D
-D 参数表示让 sshd 在前台运行(适合 Docker 容器)。
[root@683148a82b0f /]# ps aux | grep sshd
root 449 0.0 0.0 12388 2220 pts/0 S+ 10:54 0:00 grep --color=auto sshd
[root@683148a82b0f /]#
创建必要目录(部分系统需手动创建)
mkdir -p /var/run/sshd
启动 SSH 服务(前台运行,适合容器)
/usr/sbin/sshd -D &
[root@683148a82b0f /]# ps aux | grep sshd # 应显示 sshd 进程
root 453 0.0 0.0 112940 7752 pts/0 S 10:56 0:00 /usr/sbin/sshd -D
root 457 0.0 0.0 12388 2216 pts/0 S+ 10:57 0:00 grep --color=auto sshd
[root@683148a82b0f /]# netstat -tuln | grep 22 # 应显示 22 端口监听
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 ::😗 LISTEN
[root@683148a82b0f /]#
sed -i ‘s/#PermitRootLogin prohibit-password/PermitRootLogin yes/’ /etc/ssh/sshd_config
sed -i ‘s/#PasswordAuthentication yes/PasswordAuthentication yes/’ /etc/ssh/sshd_config
pkill sshd && /usr/sbin/sshd -D &
ssh root@192.168.1.121 -p 1127 这个在docker 上安装的zerotier 虽然可以连接 但是没用 应该在电脑上在做一个映射 把1127 映射到192.168.1.33 或者直接用192.168.1.33的地址来寻找1127 就可以了!!! 因为docker 的22端口已经 映射到1127 除非docker 的docker 上运行zerotier
ssh root@192.168.1.33 -p 1127
[root@683148a82b0f /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a551f683b7a zerotier/zerotier-synology:latest “/entrypoint.sh” 57 minutes ago Up 57 minutes 9993/udp zerotier
docker exec -it 6a551f683b7a /bin/bash
6a551f683b7a:/# docker
bash: docker: command not found
6a551f683b7a:/#-p 2100:2020 -p 8589:8888
[root@683148a82b0f /]# docker exec -it 6a551f683b7a /bin/bash
6a551f683b7a:/# ping 192.168.1.121
PING 192.168.1.121 (192.168.1.121): 56 data bytes
64 bytes from 192.168.1.121: seq=0 ttl=64 time=0.019 ms
根据你的配置和错误信息,以下是详细的问题分析和解决方案:
问题诊断
SSH 配置问题:
/etc/ssh/sshd_config 中 ListenAddress :: 表示 SSH 仅监听 IPv6 地址(:: 是 IPv6 的通配符)。
但 Docker 端口映射 -p 2121:2020 默认绑定到 IPv4(0.0.0.0),导致 IPv4 的 SSH 连接被拒绝。
连接错误:
你尝试从 Windows 主机连接 ssh root@localhost -p 2121,但收到 kex_exchange_identification: read: Connection aborted。
方法 1:强制 SSH 服务监听 IPv4 用这个ssh 才能成功连接上!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo “ListenAddress 0.0.0.0” >> /etc/ssh/sshd_config
pkill sshd && /usr/sbin/sshd -D &
netstat -tulnp | grep sshd
[root@683148a82b0f /]# netstat -tulnp | grep sshd
tcp 0 0 0.0.0.0:2020 0.0.0.0:* LISTEN 13865/sshd
tcp6 0 0 :::2020 ::😗 LISTEN 13865/sshd
[root@683148a82b0f /]#
方法 2:通过 IPv6 连接
如果不想修改配置,可以显式指定 IPv6 地址连接:
bash
ssh -6 root@localhost -p 2121
-6 表示强制使用 IPv6。
[若需持久化配置,建议修改 Dockerfile 或启动命令:
bash
示例 Dockerfile 片段
RUN apt update && apt install -y openssh-server
&& mkdir -p /run/sshd
&& echo ‘root:your_password’ | chpasswd
&& sed -i ‘s/#PermitRootLogin prohibit-password/PermitRootLogin yes/’ /etc/ssh/sshd_config
CMD [“/usr/sbin/sshd”, “-D”]
构建并运行容器时映射端口:
bash
docker run -d -p 2222:22 your_image]
也可以单独
Docker 容器默认没有 systemd 或其他 init 系统,无法直接管理服务。
ZeroTier 需要特权模式(如访问 /dev/net/tun 设备)才能正常运行。
网络模式:
若需主机网络访问,可添加 --net=host(但可能降低隔离性)。
完整示例命令
bash
docker run -d --name zerotier --privileged --cap-add=NET_ADMIN --cap-add=SYS_ADMIN --device=/dev/net/tun -v /var/lib/zerotier-one:/var/lib/zerotier-one zerotier/zerotier-synology:latest
#查看zerotier状态
docker exec -it zerotier zerotier-cli status
#加入网络
docker exec -it zerotier zerotier-cli join 4dfe6b96cd6a144a
570e3de8aec2: Pull complete
Digest: sha256:1813b4a445e3e9ec7b2999b037bd6c8b2fe182780a78ebe9d82c4991981fcee0
Status: Downloaded newer image for zerotier/zerotier-synology:latest
6a551f683b7ab90f95b0d5a2d1aefdd3e50c21c030891acd23f316cbe25fe86f
[root@683148a82b0f /]# docker exec -it zt zerotier-cli status
Error response from daemon: No such container: zt
[root@683148a82b0f /]# docker exec -it 6a551f683b7ab90f95b0d5a2d1aefdd3e50c21c030891acd23f316cbe25fe86f /bin/bash
6a551f683b7a:/#
6a551f683b7a:/#
[root@683148a82b0f /]# docker exec -it zerotier zerotier-cli status
200 info a3e2e961e8 1.14.0 ONLINE
[root@683148a82b0f /]# docker exec -it zerotier zerotier-cli join 4dfe6b96cd6a144a
200 join OK
[root@683148a82b0f /]#
[root@683148a82b0f /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a551f683b7a zerotier/zerotier-synology:latest “/entrypoint.sh” 5 minutes ago Up 5 minutes 9993/udp
[root@683148a82b0f /]# docker exec -it zerotier zerotier-cli status
200 info a3e2e961e8 1.14.0 ONLINE
[root@683148a82b0f /