docker 更改网络时反向代理不起作用(通过 --net)
docker reverse-proxy doesnt work when change network (by --net)
docker版本:17.05.0-ce
我有一些容器运行手动使用docker run ...
,但最近我为新项目创建了docker-compose.yml 文件基于 this tutorial。然而,当我 运行 在我的主机中遵循命令时:
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
代理不适用于旧容器,我无法使用该项目的子域(它们 "stop work")。
那怎么办?
我在 docker run ...
中使用 --net
参数并使用 docker network inspect network_name
进行实验。我得到许多不同的结果,例如 welcome to nginx 或 http 404 not found 或 http 503 temporary unavailable 和得出以下结论:
- 如果没有
--net
命令,则容器是 运行 在 bridge network
- if
--net xxx
command then cntainer is 运行 only in 'xxx' network (not in bridge !)
- 如果
--net xxx --net yyy
则容器仅在 'yyy' 中为 运行(根本没有 'xxx'!)
bridge 是容器间通信的默认 docker 网络。
所以在 运行ning 代理上我们只使用 --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 在两个网络中:)
docker版本:17.05.0-ce
我有一些容器运行手动使用docker run ...
,但最近我为新项目创建了docker-compose.yml 文件基于 this tutorial。然而,当我 运行 在我的主机中遵循命令时:
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
代理不适用于旧容器,我无法使用该项目的子域(它们 "stop work")。
那怎么办?
我在 docker run ...
中使用 --net
参数并使用 docker network inspect network_name
进行实验。我得到许多不同的结果,例如 welcome to nginx 或 http 404 not found 或 http 503 temporary unavailable 和得出以下结论:
- 如果没有
--net
命令,则容器是 运行 在 bridge network - if
--net xxx
command then cntainer is 运行 only in 'xxx' network (not in bridge !) - 如果
--net xxx --net yyy
则容器仅在 'yyy' 中为 运行(根本没有 'xxx'!)
bridge 是容器间通信的默认 docker 网络。
所以在 运行ning 代理上我们只使用 --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 在两个网络中:)