私は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番目のアプローチのみを使用するとしましょう。
持っていない:
ファイアウォールの結果
Sudo netstat -tunlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 24717/docker-proxy
Mysqlコンテナはipv6をリッスンしていると思います(netstatの結果を参照)。原因としては、ドッカーの構成が考えられます。私はそれを解決する方法がわかりません、私は個人的にこの問題を避けるために私のドッカーホストでipv6をオフにします。
それが役に立てば幸い。
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
ポートの公開に関する詳細をお読みください こちら 。