我怎样才能消除对两个 docker 容器的需求,它们一起工作以使用桥接网络?

How can I remove the need for two docker containers which work together to use bridged networking?

我有三个 docker 个容器:

1:nginx 容器可在端口 8080 上访问且不使用桥接网络

2:xwiki 容器 运行ning tomcat 可使用桥接网络在端口 8080 上访问

3:托管 xwiki 数据库的 Postgres 容器,可使用与 xwiki 容器相同的桥接网络在端口 5432 上访问

我希望能够将 nginx 设置为反向代理并在 url(例如 http://site-root/xwiki)上加载 xwiki 站点,但它无法执行此操作,因为它不在同一个桥接网络上我得到了一个没有路由到主机的错误...

所有主机都可以使用 docker 主机 ip 和相应的容器端口从远程主机访问...

我创建了 xwiki 和 postgres 容器,它们不使用桥接网络来测试这个,但是 xwiki tomcat 服务器失败,因为 xwiki 找不到 postgres 服务器,我得到以下错误 tomcat异常:

java.net.UnknownHostException: postgres-db-server

是否可以消除对 xwiki 和 postgres 容器使用桥接网络的需要,并让它们使用 docker 主机 IP 及其各自的端口号进行通信?

我想我可能需要编辑 xwiki 容器中的 tomcat 配置,使其指向使用 docker 主机 IP 和 postgres 默认端口的 postgres 服务器。 .

任何人都可以告诉我这听起来是否是正确的解决方案,或者我是否遗漏了一些关于桥接网络需求的信息?

我意识到一个可能的解决方案是将 nginx 容器设置为使用相同的桥接网络,但我也希望 nginx 服务能够反向代理 node.js 服务器 运行ning docker 主机...(不是通过 docker)

我是否应该将节点和 运行 所有容器都使用与此相同的桥接网络,从逻辑上讲应该解决这个问题,但我担心这可能会导致其他问题...

docker 主机运行正在 Centos 7

上运行

用于手动运行容器的命令如下所示:

Nginx

docker run -dti --name nginx-dev --hostname nginx-dev -p 80:80 -v /nginx/www:/usr/share/nginx/html:ro -v /nginx/conf:/etc/nginx -P -d nginx

Postgres

docker run --net=xwiki-nw --name postgres-db-server -p 5432:5432 -v /postgres/data:/var/lib/postgresql/data -e POSTGRES_ROOT_PASSWORD=xwiki -e POSTGRES_USER=xwiki -e POSTGRES_PASSWORD=xwiki -e POSTGRES_DB=xwiki -e POSTGRES_INITDB_ARGS="--encoding=UTF8" -d postgres:9.5

Xwiki

docker run --net=xwiki-nw --name xwiki -p 8080:8080 -v /xwiki:/usr/local/xwiki -e DB_USER=xwiki -e DB_PASSWORD=xwiki -e DB_DATABASE=xwiki -e DB_HOST=postgres-db-server xwiki:postgres-tomcat

运行

docker network connect xwiki nginx-dev 

然后你的nginx容器就可以找到其他两个容器的路由了。