Docker运行container时使用--net=host,如何连到container?


Docker 在启动Container 时如果用了--net=host参数,要如何连到Container内部?
在默认使用bridge网络模式时可以在Dockerfile 中添加:
`CMD /usr/sbin/sshd && start-app.sh `

这样就可以在Container启动时把sshd启动,就可以远程到container了。但是在host网络模式下,好像是行不通啊,看到有人说用 exec,我试了下:
root@debian:/home/docker/videotracker-docker-debian7_32bit/kafka# docker exec 5684aa299c11 /usr/sbin/sshd -p 3333
root@debian:/home/docker/videotracker-docker-debian7_32bit/kafka# ps -ef|grep sshd
root       463     1  0 May07 ?        00:00:00 /usr/sbin/sshd
root       637   463  0 May07 ?        00:00:03 sshd: root@pts/2 
root      1849   463  0 May07 ?        00:00:03 sshd: root@pts/5 
root     22733   463  0 May08 ?        00:00:00 sshd: root@pts/7 
root     22770     1  0 09:56 ?        00:00:00 /usr/sbin/sshd -p 3333
root     22772 15033  0 09:56 pts/8    00:00:00 grep sshd
root     27019     1  0 May07 ?        00:00:03 sshd: root@pts/0 
root     27033   597  0 May08 ?        00:00:00 /bin/sh -c /usr/sbin/sshd  && start-zk.sh
root     29101   597  0 May08 ?        00:00:00 /bin/sh -c /usr/sbin/sshd && /usr/bin/start-kafka.sh

感觉好奇怪的,sshd没有在container运行,而是在hostos上运行了。有什么好的方法吗?
已邀请:

chuckzhang - 90后

赞同来自: DockOne


建议获取PID使用nsenter进入容器
PID = docker inspect --format='{{.State.Pid}}' (CONTAINER ID)
nsenter --target $PID --mount --uts --ipc --net --pid

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自:


感觉你的这个不对啊。我在本机试了一下,sshd就是在container中运行的。也是host网络模式。
<pre># docker run -it -d --net=host os-test:v2 /bin/bash
9da4e3d58c37068abc785ea960e679e72c1bb133d13aa8dc47cce024380a01fa

docker exec 9da4e3d58c37068abc785ea960e679e72c1bb133d13aa8dc47cce024380a01fa /usr/sbin/sshd -p 3333

ps -fe|grep ssh

root 1415 1 0 Apr29 ? 00:00:00 /usr/sbin/sshd
root 5033 1415 0 10:11 ? 00:00:00 sshd: root@pts/0
root 5798 1415 0 11:05 ? 00:00:00 sshd: root@pts/3
root 6645 6594 0 11:14 ? 00:00:00 /usr/sbin/sshd -p 3333
root 6647 5806 0 11:15 pts/3 00:00:00 grep ssh</pre>
而且再宿主机上可以直接连接成功:
<pre># ssh 127.0.0.1 -p 3333
The authenticity of host ':3333 (:3333)' can't be established.
RSA key fingerprint is 01:10:95:dc:63:e7:25:02:41:de:ed:b7:b4:fc:25:99.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ':3333' (RSA) to the list of known hosts.
root@127.0.0.1's password:</pre>
我的版本信息:
<pre># docker version
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): fe22185-dirty
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): fe22185-dirty
OS/Arch (server): linux/amd64</pre>

benpao

赞同来自:


启动执行

/usr/sbin/sshd -D

进入容器

nsenter --target $( docker inspect --format "{{ .State.Pid }}" 容器ID) --mount --uts --ipc --net --pid

要回复问题请先登录注册