两个Docker容器(nginx和一个Web应用程序)无法一起使用(Linux)

时间:2019-11-21 21:08:49

标签: linux docker nginx docker-compose core

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

1 个答案:

答案 0 :(得分:0)

Nginx代理需要访问主机(!)网络才能运行,例如:

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

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

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

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

只有通过创建一个网络,然后在其上运行容器,您才能在Docker上获得类似的结果,例如:

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