Связь между несколькими контейнерами php docker - PullRequest
0 голосов
/ 15 января 2019

У меня есть несколько php-серверов, назовем их api1, api2. Я настроил файл docker-compose, который успешно запускает их в связке с nginx, чтобы они были доступны с хоста и работали нормально.

Вот пример моего docker-compose.yml:

version: "3.5"
services:
nginx:
    user: "root:root"
    image: nginx:stable
    container_name: nginx
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./cert:/etc/nginx/ssl/
        - ./vhosts/:/etc/nginx/conf.d/:cached
        - ./logs/nginx:/var/log/nginx:cached
        - ${ACCOUNT_PATH}:/var/www/api1:cached
        - ${ACCOUNT_API_PATH}:/var/www/api2:cached
api1:
    image: php-fpm-image
    build:
        context: "."
        dockerfile: "./images/api1/Dockerfile"
    user: "root:root"
    container_name: account
    working_dir:  /var/www/api1/
    volumes:
        - api1path/:/var/www/api1
api2:
    image: php-fpm-image
    build:
        context: "."
        dockerfile: "./images/api2/Dockerfile"
    user: "root:root"
    container_name: api2
    working_dir:  /var/www/api2/
    volumes:
        - api2:/var/www/api2:cached
networks:
    default:
       name: domain.com
       driver: bridge

В связи с этим docker-compose файл для функциональных тестов:

     version: '3.5'
     services:
        apitests:
           image: apitests:latest
           container_name: api_tests
           volumes:
             - ./config/:/opt/project/config/
             - ./test_reports/screenshots:/root/.selene/screenshots/
     networks:
       default:
       driver: bridge
       external:
          name: domain.com

Существуют следующие домены, которые доступны с хост-машины:

api1.domain.com 127.0.0.1

api2.domain.com 127.0.0.1

Моя проблема в том, как подключить их непосредственно в докере, потому что мне нужно делать запросы от api1 к api2, apitests к api1, api2.

Когда я запрашиваю, их домен разрешается напрямую в их контейнеры, поэтому я получаю следующую ошибку

невозможно подключиться к удаленному хосту (172.21.0.8): соединение отклонено

из любого контейнера.

Как вы понимаете, мне нужно, чтобы их домены преобразовывались в контейнер NGINX, чтобы он мог работать правильно и php-fpm мог возвращать мне результат через nginx.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Кажется, что ваша проблема в том, что вы назвали php container api1.domain.com, когда вам нужно назначить это доменное имя для контейнера nginx.

Вы можете назначить псевдонимы api1 / api2 для nginx внутри контейнерных сетей.

services:
   nginx:
      networks:
        default:
          aliases:
            - api1
            - api2
0 голосов
/ 15 января 2019

Если я вас правильно понял, у вас есть несколько docker-compose.yml файлов, и вам нужны сервисы для их взаимодействия друг с другом. Логическое предложение состоит в том, чтобы иметь глобально определенную сеть, скажем,

docker network create testapis

и все сервисы, связанные с ним:

докер-compose.yml

...
networks:
  default:
    external: 
      name: testapis

В этом случае все сервисы из всех файлов docker-compose будут видеть друг друга под своими именами хостов (api1, api2 и т. Д.), И не потребуется показывать порты (если вы не хотите использовать сервисы из-за пределов этой сети). )

...