cat posts/docker-compose-%e3%81%a7%e6%9c%ac%e7%95%aa%e7%92%b0%e5%a2%83%e3%82%92%e6%95%b4%e3%81%88%e3%82%8b%e3%81%be%e3%81%a7%e3%81%ab%e8%b8%8f%e3%82%93%e3%81%a0%e5%9c%b0%e9%9b%b7.md

【悲報】ローカルで動いたのに本番が死ぬ、なんでや

1 風吹けば名無し 2026/06/27(土) 21:04:00 ID:Dc5oMp0s
Docker Compose でローカル環境作るのは簡単やったんや
問題は本番で同じ構成を使おうとしたときやった

2 風吹けば名無し 2026/06/27(土) 21:05:23 ID:Ws9tY3ke
あるある
何踏んだんや

3 風吹けば名無し 2026/06/27(土) 21:06:08 ID:Dc5oMp0s
>>2 まず環境変数や
.env をそのまま本番に置いとった。.gitignore には入れとったけど、サーバーへの配布手順が口頭伝達やった

4 風吹けば名無し 2026/06/27(土) 21:07:16 ID:Ws9tY3ke
>>3 口頭伝達で草

5 風吹けば名無し 2026/06/27(土) 21:08:47 ID:Dc5oMp0s
>>4 後任が環境変数なしでデプロイして本番が壊れた
シークレット管理は仕組みで解決せなあかん

6 風吹けば名無し 2026/06/27(土) 21:09:40 ID:Ji6uB8rf
次は

7 風吹けば名無し 2026/06/27(土) 21:10:56 ID:Dc5oMp0s
>>6 ヘルスチェックや
depends_on はコンテナの起動順を制御するけど、DB が「起動しとる」だけでは「接続できる」ことを保証せん

8 風吹けば名無し 2026/06/27(土) 21:11:34 ID:Ji6uB8rf
>>7 それで落ちたんか

9 風吹けば名無し 2026/06/27(土) 21:12:35 ID:Dc5oMp0s
>>8 アプリが DB に繋ごうとした瞬間に DB がまだ初期化中やった

db:
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
    interval: 10s
    retries: 5

app:
  depends_on:
    db:
      condition: service_healthy  # これが重要

10 風吹けば名無し 2026/06/27(土) 21:13:59 ID:Ji6uB8rf
>>9 condition: service_healthy 知らんかったわ

11 風吹けば名無し 2026/06/27(土) 21:14:45 ID:Dc5oMp0s
>>10 これが重要や

12 風吹けば名無し 2026/06/27(土) 21:15:54 ID:Ln4dX7qz
まだあるんか

13 風吹けば名無し 2026/06/27(土) 21:17:26 ID:Dc5oMp0s
>>12 ボリュームのパーミッションや
ホストの UID とコンテナの UID がずれてファイルが書けんくなった
開発時に root で動かしとったのが原因や。本番では user: を明示するのが無難

14 風吹けば名無し 2026/06/27(土) 21:18:20 ID:Ln4dX7qz
>>13 全部ローカルでは出ん問題やな

15 風吹けば名無し 2026/06/27(土) 21:19:37 ID:Dc5oMp0s
>>14 そういうことや
本番に近いステージングで一回通してみるのが結局の近道やった