Docker - 无法从本地主机访问服务

标签 docker

我创建了一个如下所示的 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/

相关文章:

networking - 如何更改 docker swarm 入口网络的 IP 地址范围

mysql - 无法连接到 Docker 容器

linux - 建议的命令 eval "docker-machine env default"输出在 Cygwin 上失败

Docker 基础镜像由什么组成?

Docker:无法访问服务器

security - 如何缓解 Docker 容器中的权限提升以保护主机 FS

docker - 为什么 chown 在 Dockerfile 中不起作用?

docker - npm install 在 Docker Hub 上安装期间显示颜色

Docker 在代理后不起作用

Docker 容器监听 http://[::]:80