如何将 Docker 容器暴露给网络

How to expose Docker container to the web

我是 docker 的奇妙世界的新手,一开始我想问一个相当菜鸟的问题。 但首先,关于我自己的一些信息:

我正在使用 exist-db 并计划将其移至 docker。所以在服务器上设置它,我想并遵循 this 说明。我还没有导入我的应用程序,因为我想在转向“云”之前熟悉它的工作原理。

我 运行 docker 在服务器上,我使用 Putty 访问它。我已经正确设置了它,即使我的 existdb 容器也能工作:

curl localhost:8080

给出了我期望来自 existDB 的 html- 输出。 但是,当我尝试在 firefox 中访问 [server-IP]:8080 时,我无法访问它。

我知道我还没有配置任何其他东西,除了我启动容器的时候,但是下面。

docker run -it -d -p 8080:8080 -p 8443:8443 --name exist existdb/existdb:latest

这不应该将我的容器 [8080] 绑定到我的主机 [8080](或 8443 就此而言),这样我理论上应该能够 [Host-ip]:8080 并查看存在的接口?

我不想使用主机模式,因为我将来可能会启动多个应用程序& 运行,所以我认为最好将接口分开。

在此answer 之后,我引用

By default, Docker exposes container ports to the IP address 0.0.0.0 (this matches any IP on the system). If you prefer, you can tell Docker which IP to bind on. To bind on IP address 10.0.0.3, host port 80, and container port 8080:

docker run -p 10.0.0.3:80:8080 <your image>

根据评论,我已尝试重新生成设置,如您所见

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                   PORTS                                            NAMES
9eebf8c6f3b2        existdb/existdb:latest   "java org.exist.star…"   2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:8080->8080/tcp, 0.0.0.0:8443->8443/tcp   exist

所以你需要运行像下面这样的命令 docker run -it -d -p 0.0.0.0:8080:8080 -p 0.0.0.0:8443:8443 --name exist existdb/existdb:lates