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
代理不适用于旧容器,我无法将子域用于该项目(他们"停止工作")。
那该怎么办?
答案 0 :(得分:0)
我使用--net
中的docker run ...
参数并使用docker network inspect network_name
进行实验。我得到了许多不同的结果,例如欢迎使用nginx 或未找到http 404 或 http 503暂时不可用,并得出以下结论:
--net
命令,则容器在 bridge network --net xxx
命令,则cntainer仅在' xxx'中运行网络(不在网桥!)--net xxx --net yyy
,那么容器只能在' yyy' (没有' xxx'根本没有!)网桥是容器间通信的默认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-proxy
和docker network inspect bridge
时,我们会看到nginx-reverse-proxy在两个网络中:)