dockerコンテナ内からdockerデーモンに接続する 質問する

dockerコンテナ内からdockerデーモンに接続する 質問する

起動した Docker コンテナー内から接続できるように、Docker デーモンを設定しようとしています。

そこで/etc/docker/daemon.jsonを次のように変更しました

{
   "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

そのため、dockerブリッジを介して接続します。ただし、dockerを再起動すると、

netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         
State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      3728/mysqld     
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      24253/redis-server 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3756/nginx      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3634/sshd       
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      3756/nginx      
tcp6       0      0 :::8010                 :::*                    LISTEN      4230/apache2    
tcp6       0      0 :::9200                 :::*                    LISTEN      26824/java      
tcp6       0      0 :::9300                 :::*                    LISTEN      26824/java      
tcp6       0      0 :::22                   :::*                    LISTEN      3634/sshd       
tcp6       0      0 :::2375                 :::*                    LISTEN      1955/dockerd    

それで、最初は問題はIPv4ではなくIPv6でリッスンしているという事実だと思いました。そして、ポートバインディングにDockerでIPv4を使用するようにするすべてまだ動作するはずですが、動作しません。試してみると

telnet 172.17.0.1(docker host) 2375

接続に失敗しました

telnet 172.17.0.1(docker host) 80

動作します。ホストマシンで実行されているdockerに接続するにはどうすればいいですか?Ubuntu 14.04.5 dockerバージョン: 17.06.2-ceで実行しています

ベストアンサー1

ホスト Docker ソケットをコンテナにマウントしてコンテナを起動できます。

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

この設定により、コンテナ内の Docker クライアントはホストの Docker デーモンを使用するようになります。コンテナは、ホストで実行されているデーモンを使用して、ビルド、実行、プッシュなどを行うことができます。これらの設定ではすべてがホスト上で行われるため、新しいコンテナを開始すると、それらは「兄弟」コンテナになることに注意してください。

編集

ブリッジ ネットワークを使用している場合は、ホスト IP アドレスを使用して、ホスト マシン上で実行されている任意のサービスに接続できます。

例えば、IP 10.0.0.1のホストでmysqldを実行しており、コンテナから次のように実行できます。

mysql -u user -p -h 10.0.0.1

秘訣は、コンテナからホストの IP アドレスを見つけることです。

Docker for Mac(バージョン17.07.0を実行しています)では、特別なホスト「docker.for.mac.localhost」に接続するだけです。

もう一つの選択肢は、ループバックインターフェースにエイリアスIPを追加することです。

sudo ifconfig lo0 alias 192.168.1.1

そしてコンテナを実行するときにこのエイリアスIPのホストを追加します

docker run --rm -ti --add-host host-machine:192.168.1.1 mysql:5.7 bash

この設定により、コンテナ内で次のことができるようになります。

mysql -u user -p -h host-machine

おすすめ記事