Cloud Buildでこんな感じの構成をDockerComposeで構成しビルドやテストをしています。
この時にひたすらビルドコンテナからRedisコンテナへの接続が失敗したので、他の方がすぐに解決できるようにまとめておきます。
ローカル環境
ローカル環境では以下のような構成でビルドをしていました。そのためビルドプロセスに対しては環境変数でRedisが起動するホスト名とポート番号を渡しています。(ここではlocalhostと6879~6881のポート番号)
version: "3.8" services: redis1: container_name: redis1 image: redis:5.0.9 ports: - '6379:6379' redis2: container_name: redis2 image: redis:5.0.9 ports: - '6380:6379' redis3: container_name: redis3 image: redis:5.0.9 ports: - '6381:6379'
Cloud Build環境
Cloud Build側では環境変数でRedisが起動するホスト名とポート番号(redis1~3と6879~6881のポート番号)を渡していたのですがこれがうまくいきませんでした。
version: "3.8" services: redis1: container_name: redis1 image: redis:5.0.9 ports: - '6379:6379' redis2: container_name: redis2 image: redis:5.0.9 ports: - '6380:6379' redis3: container_name: redis3 image: redis:5.0.9 ports: - '6381:6379' networks: default: external: name: cloudbuild
解決策
Cloud Buildで渡す環境変数をredis1~3と6879に変更しました。
というのも当たり前なのですがCloud Buildではビルド自体もコンテナで行われるため、設定さえすればRedisも同一LAN上に存在します。そのためDockerでよく指定するPort:Portのマッピングは必要ないのです。
つまりコンテナがListenしているポート番号に対して直接通信できることになります。