我有2个申请:
每个应用程序都在Docker镜像中进行容器化。在服务器Dockerfile中我使用:
...
EXPOSE 5150
...
我无法从客户端连接到服务器:
$ docker run --rm -it --name server my-registry.com/server:0.0.1
$ docker run --rm -it --name client --link server:chat my-registry.com/client:0.0.1
我拒绝连接。
也是telnet:
$ docker run --rm -it --name client --link server:chat --entrypoint=/bin/bash my-registry.com/client:0.0.1
root@f384b008ce68:/# env | grep CHAT_PORT
CHAT_PORT_5150_TCP_ADDR=172.17.0.54
CHAT_PORT_5150_TCP_PROTO=tcp
CHAT_PORT_5150_TCP=tcp://172.17.0.54:5150
CHAT_PORT_5150_TCP_PORT=5150
CHAT_PORT=tcp://172.17.0.54:5150
root@f384b008ce68:/# telnet $CHAT_PORT_5150_TCP_ADDR $CHAT_PORT_5150_TCP_PORT
Trying 172.17.0.54...
telnet: Unable to connect to remote host: Connection refused
任何想法我做错了什么?
答案 0 :(得分:1)
每个docker容器都在一个单独的“网络命名空间”中运行。这意味着(a)每个容器都有自己的ip地址,(b)localhost
表示“此容器”,并且与其他容器中的localhost
没有任何关系。
如果您希望可以从其他容器访问您的服务,则需要将它们配置为不绑定到localhost,然后使用以下命令访问它们:
--link
或请注意,EXPOSE
目录基本上是无操作的;默认情况下,在同一主机上运行的容器可以不受限制地相互访问。当您使用EXPOSE
时,使用--link
确实有助于服务发现,因为它会导致在链接容器中填充环境变量以及有关可用服务的信息。
了解更多信息: