连接多个 Docker 应用
Connecting Multiple Docker Apps
我 运行 一系列 运行 独立但需要能够通过 PHP 对自定义单点登录服务进行 curl 调用的站点。
如果我将所有站点设置为单独的容器堆栈(意味着 sso 有它自己的一组共享容器(Nginx、PHP 和 MySQL)并且 site1 有它自己的一组共享容器,与 site2、site3 和 site4 相同)那么它们就不能互相交谈。我试过设置一个自定义网络,但我必须包含一个指定 SSO 服务器 URL IP 地址的主机文件,以便其他站点可以连接到它。
这是我当前的 docker-compose 文件:
version: "3"
services:
nginx:
image: nginx:1.10.3
ports:
- "8080:80"
- "8443:443"
volumes:
- ./projects:/var/www
- ./.docker/nginx/sites-enabled/site.conf:/etc/nginx/conf.d/site.conf
- ./.docker/nginx/sites-enabled/site-ssl.conf:/etc/nginx/conf.d/site-ssl.conf
- ./.docker/certs:/etc/nginx/certs
links:
- php
networks:
mc-net:
ipv4_address: 172.245.0.2
php:
build:
context: ./.docker/fpm
volumes:
- ./projects:/var/www
- ./.docker/sessions.inc.php:/var/www/sessions/sessions.inc.php
- ./.docker/fpm/hosts.txt:/etc/hosts
expose:
- "9000"
links:
- percona:percona
networks:
mc-net:
ipv4_address: 172.245.0.3
percona:
image: percona/percona-server:5.6
environment:
MYSQL_ROOT_PASSWORD: *****
TZ: America/Los_Angeles
ports:
- "8306:3306"
volumes:
- ./.docker/database:/var/lib/mysql
command:
- 'sh -c "ln -snf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime && echo America/Los_Angeles > /etc/timezone"'
- '--user=mysql'
networks:
mc-net:
ipv4_address: 172.245.0.4
networks:
mc-net:
driver: bridge
ipam:
config:
- subnet: 172.245.0.0/16
我是 Docker 的新手,我只需要一种方法让 site1 可以通过它的 URL curl 到 sso。我不确定该去哪里,谢谢。
对所有容器使用 docker 网络,只需通过名称调用 sso 容器即可。如果使用它的所有服务都在 docker 网络内,您甚至不需要为您的 sso 公开端口。
ssodockername:port
我 运行 一系列 运行 独立但需要能够通过 PHP 对自定义单点登录服务进行 curl 调用的站点。
如果我将所有站点设置为单独的容器堆栈(意味着 sso 有它自己的一组共享容器(Nginx、PHP 和 MySQL)并且 site1 有它自己的一组共享容器,与 site2、site3 和 site4 相同)那么它们就不能互相交谈。我试过设置一个自定义网络,但我必须包含一个指定 SSO 服务器 URL IP 地址的主机文件,以便其他站点可以连接到它。
这是我当前的 docker-compose 文件:
version: "3"
services:
nginx:
image: nginx:1.10.3
ports:
- "8080:80"
- "8443:443"
volumes:
- ./projects:/var/www
- ./.docker/nginx/sites-enabled/site.conf:/etc/nginx/conf.d/site.conf
- ./.docker/nginx/sites-enabled/site-ssl.conf:/etc/nginx/conf.d/site-ssl.conf
- ./.docker/certs:/etc/nginx/certs
links:
- php
networks:
mc-net:
ipv4_address: 172.245.0.2
php:
build:
context: ./.docker/fpm
volumes:
- ./projects:/var/www
- ./.docker/sessions.inc.php:/var/www/sessions/sessions.inc.php
- ./.docker/fpm/hosts.txt:/etc/hosts
expose:
- "9000"
links:
- percona:percona
networks:
mc-net:
ipv4_address: 172.245.0.3
percona:
image: percona/percona-server:5.6
environment:
MYSQL_ROOT_PASSWORD: *****
TZ: America/Los_Angeles
ports:
- "8306:3306"
volumes:
- ./.docker/database:/var/lib/mysql
command:
- 'sh -c "ln -snf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime && echo America/Los_Angeles > /etc/timezone"'
- '--user=mysql'
networks:
mc-net:
ipv4_address: 172.245.0.4
networks:
mc-net:
driver: bridge
ipam:
config:
- subnet: 172.245.0.0/16
我是 Docker 的新手,我只需要一种方法让 site1 可以通过它的 URL curl 到 sso。我不确定该去哪里,谢谢。
对所有容器使用 docker 网络,只需通过名称调用 sso 容器即可。如果使用它的所有服务都在 docker 网络内,您甚至不需要为您的 sso 公开端口。
ssodockername:port