我创建了一个如下所示的 Dockerfile:
FROM openjdk:8-jdk
COPY . .
ENTRYPOINT ["/bin/graphdb"]
EXPOSE 7200
在执行 docker run 34a1650b461d -p 127.0.0.1:7200:7200
时,我看到我的服务正在运行,如终端输出所示 - 但是当我转到 localhost:7200
时> 我不断看到此站点无法访问 127.0.0.1 拒绝连接。
谁能解释一下我错过了什么?
另外仅供引用 - 当我执行 docker ps
时,在 PORTS
下我看到 7200/tcp
。
我读到this page并按照所描述的内容进行操作,但没有成功。
感谢任何帮助。
谢谢。
最佳答案
对于docker run
参数的顺序很重要,所以这样:
docker run 34a1650b461d -p 7200:7200
不等于:
docker run -p 7200:7200 34a1650b461d
在第一种情况下,您将参数 -p 7200:7200
传递给 ENTRYPOINT
命令 /bin/graphdb
;而在第二种情况下,您将 -p 7200:7200
传递给 docker run
,这正是您想要的。
如何验证端口是否正确转发?
您可以通过运行 docker ps
并检查 PORTS
列来验证这一点:
$ docker run -d 34a1650b461d -p 7200:7200
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03abc0b390ef mytest "/bin/graphdb -p 720…" 6 seconds ago Up 5 seconds 7200/tcp elegant_wescoff
你看到COMMAND
是如何包含你的-p
了吗?那不是你想要的。所以 docker run 根本没有解释该参数。此外,您还可以看到 PORTS
列,该列显示端口已公开但未转发。
虽然这样做:
$ docker run -d -p 7200:7200 34a1650b461d
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03abc0b390ef mytest "/bin/graphdb" 6 seconds ago Up 5 seconds 0.0.0.0:7200->7200/tcp elegant_wescoff
您现在可以看到 -p
没有传递给 COMMAND
并且端口已转发:0.0.0.0:7200->7200/tcp
.
关于Docker - 无法从本地主机访问服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174910/