我写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中添加什么吗? 谢谢你的任何建议
答案 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>