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 。 我得到了很多不同的结果,比如欢迎nginxhttp 404找不到或者http 503暂时不可用 ,得到如下结论:

  1. 如果没有--net命令,那么容器在网桥中运行
  2. 如果--net xxx命令然后cntainer只运行在'xxx'networking(不在 !)
  3. 如果--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-proxydocker network inspect bridge我们会看到,Nginx的反向代理是在两个networking:)