在build立我的第一个docker
环境时,我创build了一个特定的networking:
root@srv /e/docker# docker network inspect docker [ { "Name": "docker", "Id": "7b20560b36032d36ffe6c0ebece6b4408355d207f4e203a2957b0434ee0afdc1", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "10.200.0.0/24" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ]
我用一个特定的IP为这个networking的图像创build了一个容器:
root@srv /e/docker# docker create --network docker --ip 10.200.0.2 --hostname dev -p 22:22 --name dev base 807f3892241d314d20837c4c749912097e1f34c62884401acd9a06e201cb5876
然后我开始这个容器,得到:
root@srv /e/docker# docker start dev Error response from daemon: driver failed programming external connectivity on endpoint dev (807f3892241d314d20837c4c749912097e1f34c62884401acd9a06e201cb5876): Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use Error: failed to start containers: dev
事实上,它有supervisord
启动sshd -D
默认绑定到该主机的所有可用的IP地址。 由于它的IP是10.200.0.2
,我希望sshd
绑定到它的127.0.0.1
和10.200.0.2
。 它看起来像这个端口是由什么东西,但什么?
主机有一个sshd
运行,但这不应该为客人的容器,对不对? (因为它生活在自己的世界里,只知道上面两个知识产权)?
编辑注释之后:换句话说,我想sshd
绑定到容器的IP(它看到的= 10.200.0.2
),并将此端口暴露在容器之外,在同一个IP上。 或者,实际上,我希望能够从主机ssh [email protected]
到达容器的sshd
。
如果要本地连接,请不要发布端口。
/e/docker# docker create --network docker --ip 10.200.0.2 --hostname dev --name dev base
你想暴露的端口。 https://docs.docker.com/engine/reference/builder/
testing/ DockerFile
FROM base EXPOSE 22
docker build -t test -f test/DockerFile test/DockerFile
尝试修改-p publish
参数绑定到特定的IP,例如-p 10.200.0.2:22:22
。 默认情况下,如果我正确记得,docker将暴露的端口发布到0.0.0.0。 正如你所提到的,你已经在主机networking上使用了端口22。
所以, -p
标志在主机上发布端口。 只是排除在容器networking上使用它的标签。