Доступ к контейнеру Docker (MySQL) без docker-compose?

Я новичок в 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.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
326
2

Ответы 2

На данный момент процесс 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, как в этом отвечать

Другие вопросы по теме