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

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

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

  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

МОЙ стек 2 docker-compose файл

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

0

Решение

Вместо сетей (которые я часто вижу в стеке как не работающие, как ожидалось) попробуйте использовать 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 игнорирует ссылки при развертывании роя.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]