#docker #docker-compose
#docker #docker-создать
Вопрос:
Пожалуйста, помогите мне, если это возможно.
Мне нужно запустить 2 приложения с одной базой данных.
У меня есть 2 приложения. Первый domain.com , 2-й api.domain.com . У каждого приложения есть docker-compose.файлы yaml.
domain.com — CMS
version: "3.8"
services:
web:
container_name: domain_web
build:
context: ./docker/php
dockerfile: Dockerfile
working_dir: /var/www/html
#command: composer install
volumes:
- ./:/var/www/html
- ./docker/php/app.conf:/etc/apache2/sites-available/000-default.conf
- ./docker/php/hosts:/etc/hosts
networks:
domain:
ipv4_address: 10.9.0.5
networks:
domain:
driver: bridge
ipam:
config:
- subnet: 10.9.0.0/16
gateway: 10.9.
volumes:
bel_baza:
api.domain.com — Laravel 5.6
version: "3.8"
services:
web:
container_name: api_domain_web
build:
context: ./docker/php
dockerfile: Dockerfile
working_dir: /var/www/html
# command: composer install
volumes:
- ./:/var/www/html
- ./docker/php/app.conf:/etc/apache2/sites-available/000-default.conf
- ./docker/php/hosts:/etc/hosts
networks:
api_domain:
ipv4_address: 10.15.0.5
db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
container_name: api_domain_db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: domain
MYSQL_USER: user
MYSQL_PASSWORD: user
volumes:
- api_domain_baza:/var/lib/mysql
- ./docker/db:/docker-entrypoint-initdb.d
networks:
api_domain:
ipv4_address: 10.15.0.6
phpmyadmin:
image: phpmyadmin
restart: always
container_name: api_domain_pma
networks:
api_domain:
ipv4_address: 10.15.0.7
redis:
image: redis:3.0
container_name: api_domain_redis
networks:
api_domain:
ipv4_address: 10.15.0.10
networks:
api_domain:
driver: bridge
ipam:
config:
- subnet: 10.15.0.0/16
gateway: 10.15.0.1
volumes:
api_domain_baza:
api_domain успешно запущен.
Мне нужно подключиться domain.com с базой api_domain_db
данных . Для подключения хоста я использовал IP-адрес 10.15.0.6. Первое приложение не подключено к базе данных из 2-го приложения.
В чем моя проблема?
Как я могу подключиться domain.com с базой данных 2-го приложения?
Ответ №1:
ваша проблема в том, что вы используете отдельные приложения docker compose для каждого приложения. И по умолчанию эти приложения не могут получить доступ к внутренним частям друг друга:
By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.
документ здесь — https://docs.docker.com/compose/networking /
Таким образом, это похоже на то, что он создает отдельную сеть для каждой компоновки docker.
- если вы хотите, чтобы они оба видели внутреннюю часть друг друга, вы можете создать внешнюю сеть docker следующим образом:
docker network create --subnet 10.1.0.0/24 network_name
- а затем используйте эту сеть в обоих docker compose следующим образом:
networks:
default:
external:
name: network_name
services:
.....
- если вам нужны фиксированные IP-адреса, вы можете определить их как
app:
image: ...
networks:
default:
ipv4_address: 10.1.0.10