#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>)

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS