Допустим, вы скомпоновали несколько образов для работы, и один из них это контейнер с php, а другой — с базой данных mySQL. Как настроить подключение к базе для кода в php?
Ясно, что имя хоста будет зависеть от настроек, которые вы задали в docker-compose.yml. Потому, нужно просто посмотреть что у нам там.
К примеру, ваша конфигурация Nginx-PHP-mySQL сервера выглядит вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
version: '3.0' services: nginx: image: nginx container_name: nginx ports: - "80:80" environment: - VIRTUAL_HOST=site.local depends_on: - php - mysql volumes: - ${CONTAINERS}/nginx/conf/:/etc/nginx/conf/ - ${MOUNT_ROOT}/nginx-conf/:/etc/nginx/conf.d/ - ${MOUNT_ROOT}/web/:/var/www/ - ${MOUNT_ROOT}/logs/nginx/:/var/log/nginx/ networks: - internal php: build: context: ${CONTAINERS}/php/ container_name: php volumes: - ${CONTAINERS}/php/php.ini:/usr/local/etc/php/php.ini - ${MOUNT_ROOT}/web/:/var/www/ ports: - "9000:9000" networks: - internal mysql: image: mysql:5.7 container_name: mysql restart: unless-stopped command: --default-authentication-plugin=mysql_native_password command: --innodb_use_native_aio=0 volumes: - ${MOUNT_ROOT}/mysql/:/var/lib/mysql/ ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} networks: - internal networks: internal: |
Сеть, которую использует mySQL контейнер, называется в данном случае «internal». При запуске, docker добавит псевдонимы сетей в файл hosts.
Там появятся строки вида:
1 2 3 4 5 6 |
# Added by Docker Desktop 192.168.1.9 host.docker.internal 192.168.1.9 gateway.docker.internal # To allow the same kube context to work on the host and the container: 127.0.0.1 kubernetes.docker.internal # End of section |
Отсюда мы можем взять нужное нам имя host.docker.internal. Очевидно, что имя создаётся по шаблону host.docker.{NETWORK_NAME}.
1 2 3 |
<?php $SQL = new mysqli('host.docker.internal', ...); |