连接多个 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