更改网络时,docker reverse-proxy不起作用(通过--net)

时间:2017-06-23 20:20:34

标签: docker docker-compose reverse-proxy docker-networking

docker version:17.05.0-ce

我使用docker run ...手动运行了一些容器,但是最近针对新项目,我根据this tutorial创建了 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

代理不适用于旧容器,我无法将子域用于该项目(他们"停止工作")。

那该怎么办?

1 个答案:

答案 0 :(得分:0)

我使用--net中的docker run ...参数并使用docker network inspect network_name进行实验。我得到了许多不同的结果,例如欢迎使用nginx 未找到http 404 http 503暂时不可用,并得出以下结论:

  1. 如果没有--net命令,则容器在 bridge network
  2. 中运行
  3. 如果--net xxx命令,则cntainer仅在' xxx'中运行网络(不在网桥!)
  4. 如果--net xxx --net yyy,那么容器只能在' yyy' (没有' xxx'根本没有!)
  5. 网桥是容器间通信的默认docker网络。

    因此,在运行代理时,我们只使用--net reverse-proxy,然后代理容器看不到 bridge ,并且无法与其他容器通信。如果我们尝试使用--net reverse-proxy --net bridge(在一行中两次或多次 - 如-p),则容器将仅连接到最后一个网络。

    所以解决方案是......以下列方式运行代理:

    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命令允许容器连接以使用多个网络。当您执行docker network inspect reverse-proxydocker network inspect bridge时,我们会看到nginx-reverse-proxy在两个网络中:)