1. ホーム
  2. docker

[解決済み] dockerコンテナからホストデータベースにアクセスする

2022-04-21 08:20:09

質問内容

あるホストマシンで mysql データベースを実行していて、そのホストで docker コンテナも実行されている場合。ホスト上で動作しているドッカーコンテナから、どのようにして mysql データベースにアクセスするのでしょうか。

例えば、コンテナにホストポートを公開する方法(docker run -pが行うことの逆)はあるでしょうか?

どのように解決するのですか?

これを一貫性のある、よく理解された、ポータブルな方法で行う方法については、いくつかの長年の議論があります。完全な解決策はありませんが、以下の議論にリンクしておきます。

いずれにせよ、docker run の --add-host オプションを使用して、コンテナの /etc/host ファイルにホストの IP アドレスを追加してみるとよいでしょう。そこから、必要なポートでホストに接続するのは簡単です。

<ブロッククオート

コンテナのhostsファイルへのエントリの追加

コンテナの /etc/hosts ファイルに他のホストを追加するには、次のようにします。 1つ以上の --add-host フラグを指定します。この例では、静的アドレスとして docker という名前のホストです。

 $ docker run --add-host=docker:10.180.0.1 --rm -it debian
    $$ ping docker
    PING docker (10.180.0.1): 48 data bytes
    56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
    56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
    ^C--- docker ping statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms

注意:Dockerホストに接続する必要がある場合もあり、その場合は ホストのIPアドレスを取得する。以下のシェルを使用することができます。 コマンドを使用すると、このプロセスを簡略化できます。

 $ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'"
 $ docker run  --add-host=docker:$(hostip) --rm -it debian

ドキュメンテーション

https://docs.docker.com/engine/reference/commandline/run/

コンテナからホストへのアクセスに関する議論。

https://github.com/docker/docker/issues/1143

https://github.com/docker/docker/issues/10023