web-dev-qa-db-ja.com

ホストからmysql dockerコンテナーにアクセスできません

私はdocker 1.6.0実行中の公式mysqlコンテナーを使用して( https://registry.hub.docker.com/_/mysql/ )。

私は、SSH、HTTPおよびNTP( http://Pastebin.com/raw.php?i=dFUcJWxy 以外のすべてのポートが閉じられている、かなり基本的なファイアウォール構成を使用しています。 =)。

Mysqlデータベースに接続しようとすると:

mysql -u root -h 172.17.0.3 -p

次のエラーメッセージが表示されます。

ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.3' (110)

ポート3306はその上でフィルタリングされます。

nmap -p 3306 172.17.0.3

PORT     STATE    SERVICE
3306/tcp filtered mysql

...ホストのポート3306を開くと、mysqlサーバーにアクセスできます。

ホストマシンのポート3306を開かずにmysqlサーバーコンテナーにアクセスする方法

役立つよりも詳しい情報:

コンテナーを起動するansibleタスク:

- name: Mysql container
  docker:
    name: mysql
    image: mysql:5.7
    state: started
    volumes:
    - /var/container_data/mysql:/var/lib/mysql
    ports:
    - "127.0.0.1:3306:3306"
    env:
        MYSQL_ROOT_PASSWORD: my-root-password

docker inspect mysql-> Pastebin.com/raw.php?i=uhXEhuXJ

iptables -L-> Pastebin.com/raw.php?i=18fkgktF

ifconfig-> Pastebin.com/raw.php?i=YJs2JnQx

さらに情報が必要な場合は、遠慮なく私に尋ねてください。

宜しくお願いします

2
tagsOf

本当の答えは--service-portsを使用してコンテナを開始するときのオプションdocker-compose

docker-compose run --service-ports db

...に従って: https://stackoverflow.com/questions/32360687/connect-to-docker-mysql-container-from-localhost/32407507#32407507

1
Caleb

Mysqd.confファイルのコンテナー内:

/etc/mysql/mysql.conf.d/mysqld.cnf 

これにコメントする:

bind-address           = 127.0.0.1

これを下に追加してください:

bind-address            = 0.0.0.0

次に、mysqlサービスを再起動します。

service mysql restart

次に、コンテナを起動します。

docker run  -p hostip:3306:3306 -it <image> bash

hostipをホストのIPアドレスに置き換えます。

ホストで、以下を実行します。

mysql --Host=hostip -u root -p
1
teja

最後に、ポートを開く3306docker0インターフェースで問題が解決しました:

iptables -t filter -A INPUT -p tcp -i docker0 --dport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -o docker0 --dport 3306 -j ACCEPT
1
tagsOf