Как подключиться к Docker MySQL контейнер на удаленной машине - PullRequest
0 голосов
/ 26 мая 2018

У меня есть две машины.Моя машина с IP1(Europe), а другая машина с общедоступной IP2(USA).На IP2 у меня запущен контейнер mysql с томом /var/lib/mysql, который должен быть реплицирован в какую-то папку на хост-компьютере ~/mysqldatabase.Добавлено правило брандмауэра для порта 3306.Также у меня есть ssh подключение к машине.Так что я не уверен, с чего начать.Обычно, когда нет докера, я просто добавляю

bind-address = 0.0.0.0

в качестве конфигурации в mysql и открываю порт брандмауэра 3306 (или другой, указывающий на mysql), и все работает.Так что, вероятно, я могу установить пакет mysql-server (хост ubuntu16.04) вне докера на машине IP2 и установить его так, чтобы он указывал на папку ~/mysqldatabase, но действительно ли это необходимо делать?Есть ли способ подключиться напрямую с IP1 на IP2:mysql_container:mysql_database

Я запускаю контейнер для установки mysql двумя способами.Один из них с файлом докера.А другой - со службой systemctl.

Часть docker-compose.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.service

[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

Чтобы сделать вещи болеепросто скажем, что я использую только второй подход.

I DON "T имеют:

  • 1.mysql-client, mysql-server или 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 ]

0 голосов
/ 05 июня 2018

Я думаю, ваш контейнер mysql прослушивает ipv6 (видя ваш результат netstat).Причиной может быть ваша конфигурация докера.Я не знаю, как ее решить, лично я отключаю ipv6 на своих хостах докеров, чтобы избежать этой проблемы.

Надеюсь, это поможет.

0 голосов
/ 27 мая 2018

Вы не указываете, как вы запускаете свой контейнер mysql ...

Вам необходимо указать, какой порт должен быть «опубликован», т. Е. Какой порт должен пройти «снаружи» во «ваш» вашMySQL контейнер.

Чтобы достичь этого, вы либо задаете опцию -p, когда делаете 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

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

...