@GrimJack

Как пробросить контейнер с mysql к контейнеру с веб сервером?

docker-compose.yml
db:
  image: mysql:5.7
  ports:
    - "3306:3306"
  environment:
    - MYSQL_ROOT_PASSWORD=nimda2017
    - MYSQL_USER=october
    - MYSQL_PASSWORD=secret
    - MYSQL_DATABASE=myAppDB
web:
  image: igontarev/php-server
  ports:
    - "80:80"
    - "443:443"
  links:
    - db
  volumes:
    - ./www:/var/www
    - ./sites:/etc/nginx/sites-enabled
    - ./logs/nginx:/var/log/nginx
    - ./logs/php:/var/log/php
    - ./cron:/etc/cron.d
    - ./supervisor:/etc/supervisor/conf.d
    - ./letsencrypt:/etc/letsencrypt
    - ./lib/letsencrypt:/var/lib/letsencrypt


При установке приложений внутри контейнера web не могу достучаться до бд по локалхосту (SQLSTATE[HY000] [2002] No such file or directory) и по ip сервера ().
Однако mysql workbench может подключиться к бд по ip сервера
Как можно решить вопрос?
  • Вопрос задан
  • 965 просмотров
Решения вопроса 2
Xuxicheta
@Xuxicheta
инженер
Вот у вас же написано в описании сервиса web
links:
- db

####
Более правильно и наглядно было написать
links:
- db:db
)
####

это значит кто контейнер сервиса "db" для сервиса "web" будет доступен по адресу db
localhost внутри контейнера укажет на сам этот контейнер, айпи хоста на сам хост. Конечно по айпи хоста можно добраться до базы, поскольку проброшен порт (что и делает ваш mysql workbench), но видимо докер добавляет это правило iptables только для внешних сетей.
Ответ написан
Комментировать
UmbrellaCoders
@UmbrellaCoders
PHP, JS Developer
посмотрите на каком айпи крутится контейнер за базой, docker inspect

в настройках php приложения укажите этот ip
например у меня с тремя контейнерами nginx+php-fpm+postgres , база имеет айпи 172.17.0.3 , его и указываю.

контейнеры общаются с друг другом по внутренней сетке своей, а вы пытаетесь из контейнера подключится к другому с внешней стороны, надеюсь понятно объяснил.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы