两个 docker 容器(nginx 和一个网络应用程序)不能一起工作 (linux)

Two docker container (nginx and a web app) not working together (linux)

我使用 Docker 文件构建了两个容器(每个)。我将 NGINX 容器指向 (proxy_pass http://localhost:8080) Web 应用程序公开的端口(通过 -p 8080:80)。当我在 linux 机器上安装 NGINX 时,我能够让它工作,但是当我使用 dockerized NGINX 时,我只得到默认的 NGINX index.html。当我希望容器一起工作时,是否必须使用 Docker-Compose.yml 文件(与 Docker 文件相反)来构建两个容器?抱歉,如果我没有输入任何代码,但在这一点上,我只是想知道我是否采用了正确的方法(使用 Dockerfile 或 Docker-Compose)。

Nginx 代理需要访问主机 (!) 网络才能正常工作,例如:

docker container run ... --net=host ... nginx

没有它,localhost 指的是代理 (localhost),它可能在 :8080 上没有任何内容,当然也不是您的网络应用程序。

或者,如果代理的容器 (!) 可以解析|访问主机,那么容器中的进程可以使用主机的 DNS 名称或 IP 引用主机可访问的端口。

Docker Compose(通常)通过将容器放到新的虚拟网络上来解决这个问题。不同之处在于,不是将所有内容都映射到主机端口,而是每个容器(称为服务)都有一个唯一的名称,并且名为 proxy 的容器可以引用端口 8080 上名为 web 的容器作为http://web:8080.

您可以通过 Docker 实现类似的结果,只需创建一个网络,然后在其上放置 运行 个容器,例如:

docker network create ${NETWORK}
docker container run ... --net=${NETWORK} --name=proxy ...
...