dockerfile暴露端口无法telnet

时间:2018-07-14 14:03:32

标签: docker

我写dockerfile

EXPOSE 2181 2888 3888

和docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
abc644fe1ad0        00088267fb34        "/opt/startzookeeper…"   2 seconds ago       Up 1 second         2181/tcp, 2888/tcp, 3888/tcp   hopeful_curie

但是当我telnet localhost 2181

  

尝试:: 1 ... telnet:连接至地址:: 1:拒绝连接   尝试127.0.0.1 ... telnet:连接到地址127.0.0.1:连接   远程登录被拒绝:无法连接到远程主机

为什么我无法远程登录裸露的端口?我应该在dockerfile中添加什么吗? 谢谢你的任何建议

2 个答案:

答案 0 :(得分:1)

EXPOSE只是添加到图像的元数据(如“ Docker ports are not exposed”中所述)。
它实际上不会发布端口。

您需要确保自己docker run the image with -p option,才能将容器端口实际发布到主机端口。

-p=[]
  

将容器的端口或一系列端口发布到主机
  格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort

答案 1 :(得分:1)

EXPOSE指令通知Docker容器在运行时侦听指定的网络端口。您可以指定端口是侦听TCP还是UDP,如果未指定协议,则默认值为TCP。 EXPOSE指令实际上不会发布端口。 。要在运行容器时发布端口,请使用docker run上的-p标志发布并映射一个或多个端口,或使用-P标志发布所有公开的端口并将其映射到高阶端口。

例如:docker run -d -p 2181:2181 <image>