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