フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

Cloud Buildでローカルホストにアサインしたポートに接続できない問題

Cloud Buildでこんな感じの構成をDockerComposeで構成しビルドやテストをしています。

f:id:lirlia:20210817212658p:plain

この時にひたすらビルドコンテナからRedisコンテナへの接続が失敗したので、他の方がすぐに解決できるようにまとめておきます。

ローカル環境

ローカル環境では以下のような構成でビルドをしていました。そのためビルドプロセスに対しては環境変数でRedisが起動するホスト名とポート番号を渡しています。(ここではlocalhostと6879~6881のポート番号)

f:id:lirlia:20210817213105p:plain

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のポート番号)を渡していたのですがこれがうまくいきませんでした。

f:id:lirlia:20210817212658p:plain

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のマッピングは必要ないのです。

f:id:lirlia:20210817212658p:plain

つまりコンテナがListenしているポート番号に対して直接通信できることになります。