我使用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)。
答案 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 ...
...