非常に小さいことなんですが、タイトルのようなケースで別サービスから参照されるためだけ(たとえばアプリ用のコンテナからDBのコンテナを参照したい場合)にいちいちコンテナ名が指定されているケースが多く「いらないのだが……?」と、いつももやっとしているんですよね。
docker-compose.ymlでいえば
つまりこういう話です。
services:
db:
image: postgres:latest
# container_name: mydb # <-これがいらない
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
# ports:
# - "5432:5432" # <-実はこれもいらない(あくまでホストマシンに対する設定なので。多分)
app:
image: node:latest
environment:
DB_HOST: db # <- docker-composeのサービス名指定でOK。
DB_USER: user
DB_PASSWORD: password
DB_NAME: mydatabase
depends_on:
- db
volumes:
- .:/app
working_dir: /app
サンプルコード
ほんとかよ、と思うかたは以下のコードを使ってご確認ください。
余談:ネットワーク設定について
ネットワーク設定( networks
)も接続に必須であるかのように言われている場合もやっとするのですが(※)、しかし接続に必須ではないのですがPJ管理上は絶対あったほうがいいので、そこは不要とはいいづらい。必要なんですよ。必要なんですけど、必要な理由は指定がないと接続できないから、ではないのです。
(※)ネットワークの指定がない場合はデフォルトのネットワークに接続されるので、指定しなくても接続できます。
上記のソースコードでネットワーク設定はdockder-compose.override.ymlで定義しておきましたので、ネットワーク設定についてもほんとかよ、と思うかたは、当該ファイルのファイル名・拡張子を変えるなどで無効化しておためしください。
謝辞
サンプルコードはほとんどGitHub Copilotが書いてくれました(^^)
Copilotがないともう開発無理無理ぃ。