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

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

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

bind-address = 0.0.0.0

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

私は、mysql docker コンテナを 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.サービス

[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

ベストアンサー1

これらのヒントをすべて試してもまだ接続できない場合は、別のポートの使用を検討してください

例:

ports:
      - '3308: 3306'

私はこのように問題を解決しました。

おすすめ記事