Как подключиться к сервисам, работающим в другом стеке докеров? - PullRequest
0 голосов
/ 10 мая 2018

Могут ли службы, работающие в двух разных стеках стыковки, обмениваться данными?

Это то, что я пытался и не смог достичь.

  1. Создан стек ( stack1 ) под управлением nginx и php-fpm работает отлично.
  2. Создан еще один стек ( stack2 ) под управлением базы данных mysql.
  3. Теперь я хочу, чтобы служба stack1 могла взаимодействовать со stack2 так, чтобы она могла обращаться к службе базы данных.

Я думаю, что это могло бы помочь и создало внешнюю сеть, и попыткадобавить сервис в stack1 и stack2 к нему так, чтобы они тоже могли общаться друг с другом

Mystack1 docker-compose file

version: "3.4"
networks:
    apps-net:
    db-net:
        external:
            name: db-net
services:
    web:
        image: nginx:latest
        ports:
            - "9080:80"
        volumes:
            - ./code:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf

        depends_on:
            - php
        networks:
            - apps-net
            - db-net

        deploy:
            mode: replicated
            replicas: 1
    php:
        image: php:7-fpm
        volumes:
            - ./code:/code
        networks:
            - apps-net
            - db-net
        deploy:
            mode: replicated
            replicas: 1

Мой файл для создания докера stack2

version: '3.3'
networks:
    db-net:
        external:
            name: db-net

services:
    db:
        image: mysql:5.7
        volumes:
            - db_data:/var/lib/mysql
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: wordpress
            MYSQL_USER: root
            MYSQL_PASSWORD: password
        networks:
            - db-net

volumes:
    db_data:

Я создал сеть области роя с помощью команды docker network create db-net

ВЫХОД:

nginx и php работают нормально, но я добавил базу данныхкоды соединения в index.php, которые привели к сообщению об ошибке. Является ли ошибка, потому что они не связаны?Я также установил расширения php-mysql, но в нем есть ошибка.Как я могу убедиться, что службы успешно взаимодействуют.

nginx and php working
Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /code/index.php:11 Stack trace: #0 {main} thrown in /code/index.php on line 11

1 Ответ

0 голосов
/ 10 мая 2018

Вместо сетей (которые, как я часто вижу, в стеке спрашивают, что они не работают должным образом), попробуйте использовать external_links, что хорошо объяснено здесь .

Попробуйте удалить все пользовательские конфигурации сетии просто измените свой файл компоновки приложения следующим образом:

version: "3.4"
# removed all custom networks configuration

services:
    web:
        image: nginx:latest
        external_links:
           - mysql_1:mysql
        [..]
    php:
        image: php:7-fpm
        external_links:
           - mysql_1:mysql
        [..]

, где mysql_1 - фактическое имя контейнера, созданное вашим последним файлом компоновки, а mysql - псевдоним, с помощью которого ваша служба будет доступна внутри.php и web контейнеры

Ссылки являются устаревшей опцией в v3, и Docker предлагает вместо этого использовать сети. Я опубликую правку о развертывании роя, поскольку подход будет совершенно другим , поскольку Docker игнорирует ссылки при развертывании роя.

...