Как подключиться к контейнеру 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

подробнее о публикации портов здесь.