web-dev-qa-db-ja.com

リモートマシンのdocker mysqlコンテナに接続する方法

私は2台のマシンを持っています。私のマシンはIP1(Europe)で、他のマシンはpublic IP2(USA)です。 IP2で、ボリューム/var/lib/mysqlが設定されたmysqlコンテナがホストマシンのいくつかのフォルダーに複製されるように設定されています~/mysqldatabase。ポート3306のファイアウォールルールが追加されました。また、マシンへのssh接続があります。だからどこから始めればいいのかわかりません。通常、Dockerがない場合は追加するだけです

bind-address = 0.0.0.0

mysqlの設定として、ファイアウォールポート3306(またはmysqlを指す別のポート)を開くと、動作します。したがって、おそらくmysql-serverパッケージ(ホストはubuntu16.04)をIP2マシンのdockerの外部にインストールし、~/mysqldatabaseフォルダーを指すように設定できますが、それは本当に必要ですか? IP1からIP2:mysql_container:mysql_databaseに直接接続する方法はありますか

Mysqlドッカーコンテナーを2つの方法で実行します。 1つはdockerファイルです。もう1つは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

物事をより簡単にするために、2番目のアプローチのみを使用するとしましょう。

持っていない:

  • 1. IP2マシン上のmysql-client、mysql-serverまたはmysql
  • 2.そして、mysqlコンテナに直接接続したいので、0.0.0.0にバインドする場所を設定していません。おそらく、このコンテナ内で0.0.0.0にバインドするように設定する必要があります。

ファイアウォールの結果

Sudo netstat -tunlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      24717/docker-proxy
12
makkasi

Mysqlコンテナはipv6をリッスンしていると思います(netstatの結果を参照)。原因としては、ドッカーの構成が考えられます。私はそれを解決する方法がわかりません、私は個人的にこの問題を避けるために私のドッカーホストでipv6をオフにします。

それが役に立てば幸い。

4
Webvoid

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

ポートの公開に関する詳細をお読みください こちら

3
Alex Karshin