Как подключиться к контейнеру Docker mysql на удаленной машине
у меня две машины. Моя машина с IP1(Europe)
, и другая машина с публикой IP2(USA)
. On IP2
у меня есть контейнер mysql, работающий с volume /var/lib/mysql
установить для репликации в некоторую папку на хост-компьютере ~/mysqldatabase
. Правило брандмауэра для порта это. Также у меня есть ssh-соединение с машиной. Так что я не знаю, с чего начать. Обычно, когда нет докера, я добавляю просто
bind-address = 0.0.0.0
как конфигурация в mysql, и я открываю порт брандмауэра 3306
(или другие тот, который указывает на mysql), и все работает.
Поэтому, вероятно, я могу установить пакет mysql-server (хост-ubuntu16.04) вне докера на машине IP2 и установить его, чтобы указать на ~/mysqldatabase
папка, но действительно ли это необходимо?
Есть ли способ подключиться непосредственно из IP1
to IP2:mysql_container:mysql_database
я запускаю контейнер MySQL docker двумя способами. Один из них с файлом docker. А другой - с сервисом systemctl.
часть докер-сочинять.в формате YML:
version: "3"
services:
mysql:
image: mysql:5.7
volumes:
- /home/username/mysqldatabase:/var/lib/mysql
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: somedb
MYSQL_USER: someuser
MYSQL_PASSWORD: someuserpassword
mysql.сервис
[Unit]
Description=Run %p
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -f %p
docker run --rm --name mysql -v /home/username/mysqldatabase:/var/lib/mysql -p 3306:3306
-e MYSQL_ROOT_PASSWORD=rootpass -e MYSQL_DATABASE=somedb -e MYSQL_USER=someuser -e MYSQL_PASSWORD=someuserpassword
mysql:5.7
ExecStop=/usr/bin/docker stop %p
[Install]
WantedBy=multi-user.target
чтобы сделать вещи более простыми, скажем, что я использую только второй подход.
я Дон"Т есть :
- 1.mysql-клиент, mysql-сервер или mysql на машине IP2
- 2.и я не установил нигде привязку к 0.0.0.0, потому что я хочу подключиться непосредственно к контейнеру mysql. Наверное, я должен его установить. привязать к 0.0.0.0 внутри этого контейнер.
результат для брандмауэра
sudo netstat -tunlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 24717/docker-proxy
2 ответов
Я думаю, что ваш контейнер mysql прослушивает ipv6 (видя результат netstat). Причиной может быть ваша конфигурация docker. Я не знаю, как это решить, я лично просто отключаю ipv6 на моих хостах docker, чтобы избежать этой проблемы.
надеюсь, что это помогает.
вы не указываете, как вы запускаете контейнер mysql...
вам нужно указать, какой порт должен быть "опубликован", т. е. какой порт должен идти от" снаружи "к" внутри " вашего контейнера mysql.
для достижения этого вы либо указываете когда вы docker run
или добавьте его в свой docker-compose.yml
.
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:tag
или docker-compose.yml
version: '3.1'
services:
db:
image: mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: example
подробнее о публикации портов здесь.