#author("2025-02-14T07:23:55+09:00","","") #author("2025-02-14T07:28:57+09:00","","") #mynavi(dockerメモ) #setlinebreak(on); * 概要 [#gcf54c0a] docker-compose で作成したコンテナから、他の docker-compose で作成済みのコンテナにアクセスする方法を記載する。 * 目次 [#r0b37270] #contents - 関連 -- [[dockerメモ]] -- [[Dockerコンテナ同士の通信]] * サンプルフォルダ構成 [#o4197663] #html(<div class="pl10">) #html(<div style="border: 1px solid #333; padding: 10px; margin-bottom: 10px;">) #html(){{ mycompose1<br /> └── docker-compose.yml<br /> mycompose2<br /> └── docker-compose.yml<br /> }}; #html(</div>) #html(</div>) * (方法1) ホスト経由でアクセスする [#y91c7bf4] #html(<div class="pl10">) host.docker.internal を使用してホスト経由でアクセスする。 ※ただし、ホスト経由となる為、ホスト側にバインドされていないポートへのアクセスは出来ない点に注意。 #ref(image1.png,nolink) ** 1つ目の docker-compose #html(<div class="pl10">) mycompose1/docker-compose.yml #mycode2(){{ version: '3' services: mysamplepostgres1_1: hostname: mysamplepostgres1_1 container_name: mysamplepostgres1_1 image: postgres:14 volumes: - "./volumes/pgdata:/var/lib/postgresql/data" environment: - POSTGRES_PASSWORD=postgres ports: - "5433:5432" }} #html(</div>) ** 2つ目の docker-compose [#a40f3326] #html(<div class="pl10">) mycompose2/docker-compose.yml #mycode2(){{ version: '3' services: mysampleadminer1_2: hostname: mysampleadminer1_2 container_name: mysampleadminer1_2 image: adminer ports: - "8080:8080" extra_hosts: - "host.docker.internal:host-gateway" }} #html(</div>) 以上で mysampleadminer1_2 から host.docker.internal という名前でホストを参照できる為、 host.docker.internal:5433 で postgres にアクセス可能となる。 ''以上で mysampleadminer1_2 から「host.docker.internal:5433」で postgres にアクセス可能となる。'' ※ mysampleadminer1_2 からは host.docker.internal という名前でホストを参照できる状態になる為。 #html(</div>) * (方法2) コンテナを同じdockerネットワークに配置する [#t196f8b8] #html(<div class="pl10">) ** 1つ目の docker-compose [#mf400a64] #html(<div class="pl10">) mycompose1/docker-compose.yml #mycode2(){{ version: '3' services: mysamplepostgres2_1: hostname: mysamplepostgres2_1 container_name: mysamplepostgres2_1 image: postgres:14 volumes: - "./volumes/pgdata:/var/lib/postgresql/data" environment: - POSTGRES_PASSWORD=postgres }} #html(</div>) ** 2つ目の docker-compose [#ad16ab29] #html(<div class="pl10">) 上記の1つ目の docker-compose は デフォルトで mycompose1_default というネットワーク内に配置される為、 こちらの docker-compose のデフォルトネットワークも mycompose1_default にする事で、同一ネットワークにコンテナが配置される。 ※ https://docs.docker.jp/compose/networking.html mycompose2/docker-compose.yml #mycode2(){{ version: '3' services: mysampleadminer2_2: hostname: mysampleadminer2_2 container_name: mysampleadminer2_2 image: adminer ports: - "8080:8080" networks: default: name: mycompose1_default external: true }} #html(</div>) 以上で、 mysampleadminer2 から mysamplepostgres1:5432 で postgreSQL に接続する事が可能となる。 ''以上で mysamplepostgres2_2 から「mysamplepostgres2_1:5432」で postgreSQL にアクセス可能となる。'' ※ホスト経由ではない為、ホスト側にバインドしていないポートへのアクセスも可能。 (上記の例では Postgres はホスト側にポートバインドしていないが、mysampleadminer2_2 からアクセス可能) #html(</div>)