@GrimJack

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

Работаю через docker-compose
docker-compose.yml
web:
  image: igontarev/php-server
  ports:
    - "80:80"
    - "443:443"
  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
db:
  image: mysql:5.7
  ports:
    - "3306:3306"
  environment:
    - MYSQL_ROOT_PASSWORD=nimda2017



Получается у нас 2 докер контейнера
sudo docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                      NAMES
30b0b955fdca        igontarev/php-server   "/usr/bin/supervisord"   7 seconds ago       Up 6 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   docker_web_1
1d7ad0ed6081        mysql:5.7              "docker-entrypoint..."   7 seconds ago       Up 6 seconds        0.0.0.0:3306->3306/tcp                     docker_db_1



web контейнер на котором крутится нгинкс + php7 нормально работает извне (о чем свидетельствует то, что я могу по домену открыть сайт расположенный в контейнере).
Самое интересное, что mysql workbench без проблем по ip сервера логинится и работает, а из консоли и при установке скриптов - timeout соединения.

В идеале бы получать доступ по loacalhost, но и по ip тоже нормально. Как этого добиться?

бинд-адрес в my.cnf пробовал - mysql вообще не стартует ругаясь на эту строку.
  • Вопрос задан
  • 1645 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ilyarsoftware
Без дополнительных настроек работает по 127.0.0.1, вот рабочий сценарий:

docker run --name db_test \
 -e MYSQL_DATABASE=test \
 -e MYSQL_ROOT_PASSWORD=root \
 -p 3306:3306 \
 -d mysql:5.5


На хостовой машине стоит только mysql-client, можно использовать любой клиент, пользуюсь консолью, накатить дамб:

MYSQL_PWD=root mysql \
-u root -h 127.0.0.1 \
--init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" \
test < dump.sql


снять дамб

MYSQL_PWD=root mysqldump \
-u root -h 127.0.0.1 \
--compact \
--add-drop-table \
--extended-insert=FALSE \
test_moco_core > dump.sql


P.S. Держать базу в докере или наставать иные способы это вопрос целей, я использую для модульных тестов и экспериментов, цели достигнуты.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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