docker反向代理不工作时更改networking(通过 – networking)
docker版本:17.05.0-ce
我有一些使用docker run ...
手动运行的容器docker run ...
但最近新的项目,我创build基于本教程 的docker-compose.yml文件。 但是,当我在我的主机中运行以下命令:
docker network create --driver bridge reverse-proxy docker-compose up
和
docker run -d --name nginx-reverse-proxy --net reverse-proxy -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
该代理不适用于旧的容器,我无法使用子域到该项目(他们“停止工作”)。
那么该怎么办?
我在--net
docker run ...
使用--net
参数进行实验docker run ...
并使用--net
docker network inspect network_name
。 我得到了很多不同的结果,比如欢迎nginx或http 404找不到或者http 503暂时不可用 ,得到如下结论:
- 如果没有
--net
命令,那么容器在网桥中运行 - 如果
--net xxx
命令然后cntainer只运行在'xxx'networking(不在桥 !) - 如果
--net xxx --net yyy
然后容器只运行在“yyy”(根本不需要xxx)!
该桥是用于集装箱相互通信的默认dockernetworking。
所以,当运行代理我们只使用--net reverse-proxy
然后代理容器不能看到桥 ,不能与其他容器进行通信。 如果我们尝试使用--net reverse-proxy --net bridge
(两行或更多的一行 – 像-p
),那么容器将只连接到最后一个networking。
所以解决scheme是…按以下方式运行代理:
docker run -d --name nginx-reverse-proxy -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy docker network connect reverse-proxy reverse-proxy
如你所见,我们根本不使用--net
命令。 network connect
命令允许容器连接使用多个networking。 当你执行docker network inspect reverse-proxy
和docker network inspect bridge
我们会看到,Nginx的反向代理是在两个networking:)