Docker executor サービスコンテナとのポート競合

CircleCI では、いくつものサービスコンテナを利用できるので、ジョブの実行時にコンテナのポートを変更することはできません。 CircleCI は、コンテナのポートを自動的に localhost へバインドします。そのため、複数のサービスコンテナが同じポートを必要とする場合に問題が発生します。 例えば、postgres データベースが 2 つある場合などです。 次の例について考えてみます。

version: 2
jobs:
build:
# プライマリコンテナは、リストされている最初のイメージのインスタンスです。
docker:
- image: circleci/node:4.8.2-jessie
- image: postgres:11-alpine-ram
- image: postgres:11-alpine-ram

両方の postgres サービスイメージが、localhost:5432 へのバインドを試み、エラーを引き起こします。 これを防止するには、イメージポートのバインド先のホスト名として使用する名前を、イメージに指定します。

  docker:
    - image: circleci/node:4.8.2-jessie
    - image: postgres:11-alpine-ram
    - image: postgres:11-alpine-ram
        name: postgres2

name パラメーターを指定することで、2 番目のコンテナは postgres2:5432 から、最初の postgres コンテナは localhost:5432

からアクセスできるようになります。

関連情報
https://circleci.com/docs/2.0/configuration-reference/#docker

この記事は役に立ちましたか?
7人中2人がこの記事が役に立ったと言っています

コメント

0件のコメント

記事コメントは受け付けていません。