Я новичок в Docker и могу сбивать с толку, но предположим, что у меня несколько проектов, и я хочу использовать с ними одну и ту же базу данных MySQL Docker.
Некоторые из этих проектов также запускают Docker, некоторые - нет, те, на которых запущен Docker, имеют docker-compose.yml в репозиториях, поэтому я не могу изменить этот файл, для других я вообще не хочу использовать Docker (за исключением базового контейнера) .
Я уже вытащил https://hub.docker.com/_/mysql/, затем запустил его так:
docker run --name mysql-experiment -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.21
Когда я запускаю docker ps, я вижу, что mysql-experiment работает.
Я могу войти в контейнер с помощью docker exec -it mysql-experiment bash. Но я недостаточно хорошо разбираюсь в MySQL, чтобы управлять им через Терминал.
У меня вопрос - как я могу настроить этот контейнер, чтобы он получил свой собственный порт и IP, и я мог использовать его где угодно в моей локальной сети, без docker-compose?
Прямо сейчас он работает на локальном хосте на порту 3306 (согласно docker ps), но когда я пытаюсь получить доступ к 127.0.0.1:3306 в Sequel Pro, я получаю:
Unable to connect to host 127.0.0.1, or the request timed out.
Кроме того, я не уверен, какое имя пользователя мне следует использовать с этим контейнером (я пробовал admin / root / empty)
[редактировать]
Я знаю, что есть много подобных вопросов, но все они связаны с docker-compose.






На данный момент процесс mysql работает на порту 3306 в самом контейнере. Вы можете убедиться, что процесс запущен, установив ssh-ing в контейнер с помощью docker exec, как и вы, и выполните следующие действия:
mysql -u root -p root -h localhost
Здесь localhost принадлежит контейнеру mysql. Чтобы получить доступ к процессу mysql через локальную среду (которая, как я предполагаю, в данном случае является хостом докера), вам необходимо опубликовать порт. Это можно сделать с помощью флага -p в docker run:
docker run --name mysql-experiment -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.21
Здесь мы привязываем порт 3306 хоста к порту 3306 контейнера. Если вы хотите получить доступ к mysql, используя другой порт на вашем локальном хосте, скажем, 3307, вы можете использовать -p 3307:3306.
Ссылка: https://docs.docker.com/engine/reference/run/#expose-incoming-ports
Я бы посоветовал вам всегда использовать чистую базу данных mysql во всех ваших службах создания докеров. Ваши сервисы станут более независимыми, и вы сможете легко управлять доступом в одном docker-compose.yml.
Но если вы хотите использовать только один MySQL, я бы порекомендовал
создать объем для хранения данных, вы никогда не должны писать в файловую систему контейнера в долгосрочной перспективе
docker volume create my_mysql_data
запустите mysql и сопоставьте порт с хостом с помощью -p
docker run -d -p 3306:3306 --restart always \ # port and restart policy
-v my_mysql_data:/var/lib/mysql \ # use the volume created before
--name mysql-experiment -e MYSQL_ROOT_PASSWORD=root \
mysql:5.7.21
доступ к mysql из другого контейнера докеров с использованием IP-адреса хоста или использования
эта опция --link позволяет этому "my_web" получить доступ к контейнеру mysql по адресу mysql.
docker run -d --name my_web \
--link mysql-experiment:mysql \
debian
если вы используете Mac и docker-compose contianer, вы можете получить IP-адрес хоста (вашего Mac) с помощью docker.for.mac.host.internal, как в этом отвечать