Bitbucket Pipelines:サービスのコンテナに「Connection refused」
Pipelines のサービス(MySQL・PostgreSQL・Redis など)は、ビルドのコンテナの隣の別のコンテナで動きます。2つは同じネットワークを使うので、サービスは 127.0.0.1 でポートを開き、スクリプトはそこへ繋ぎます。繋がらないときは、たいてい次のどれかが出ます。
psql: error: connection to server at "127.0.0.1", port 5432 failed: Connection refused ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3306' (111) Error: connect ECONNREFUSED ::1:5432 psql: error: could not translate host name "postgres" to address: Name or service not known
ステップにサービスを並べる
Atlassian のデータベースとサービス コンテナによると、サービスは definitions: services: に一度書き、ステップは自分の services: に並べたサービスだけを受け取ります。定義だけでは何も起動しません。繋ぐステップにはどれも一覧が要り、並列のステップも1つずつ書きます。
definitions:
services:
postgres:
image: postgres:15
variables:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
pipelines:
default:
- step:
services:
- postgres
script:
- export DATABASE_URL=postgresql://testuser:testpass@127.0.0.1:5432/testdb
- npm test
サービス名ではなく 127.0.0.1
サービスはビルドのコンテナとネットワークのアダプターを共有するので、引くホスト名も、つなぐポートの対応もありません。PostgreSQL は 5432、MySQL は 3306、Redis は 6379、MongoDB は 27017 で待っています。Docker Compose や GitLab CI ではサービスに名前で繋ぎますが、その設定を写すと「could not translate host name」や getaddrinfo ENOTFOUND で止まります。127.0.0.1 を使います。
同じページは、IPv6 の問題を避けるために localhost より 127.0.0.1 を勧めています。クライアントによっては localhost を先に IPv6 の ::1 として引き、エラーにもその番地が出ます。Node.js の ECONNREFUSED ::1:5432 がそうです。
サービスがまだ起動していない
Pipelines はステップと一緒にサービスを起動しますが、準備ができるまでは待ちません。ページの制限の一覧にも「起動を待つ仕組みは組み込まれていない」とあります。準備中のデータベースは最初の接続を断るので、すぐに始まったテストは落ちます。Atlassian の例は、テストの前に until のループで待っています。回数を決めておくと、時間の上限まで回り続けず、1分ほどで諦めます。
script:
- |
for i in $(seq 1 30); do
pg_isready -h 127.0.0.1 && break
sleep 2
done
- pg_isready -h 127.0.0.1
- npm test
最後の pg_isready は、データベースが最後まで上がらなかったときにステップを失敗させます。確かめるにはビルドのイメージにクライアントが要ります。Atlassian のほかの例は mysql -h 127.0.0.1 ... -e "SELECT 1"、redis-cli -h 127.0.0.1 ping、ヘルスチェックの URL への curl -f です。イメージに入っていなければ、ループのたびに「command not found」が出ます。
サービスが起動しなかった
サービスのコンテナが起動に失敗しても、ビルドのログにはそうと出ないことがあります。2026年3月に立った Atlassian の課題 BCLOUD-24054(英語)がそこにはっきり出すよう求めていて、まだ関心を集めている段階です。理由はサービス自身のログにあります。Pipelines の画面を新しくした Atlassian の2026年10月29日の記事(英語)によると、ステップのログの画面で、サービスのログはドロップダウンにまとめられました。
- 公式の
postgresイメージは、POSTGRES_PASSWORD(かPOSTGRES_HOST_AUTH_METHOD: trust)が無いと起動しません。 - 公式の
mysqlイメージは、MYSQL_ROOT_PASSWORD・MYSQL_ALLOW_EMPTY_PASSWORD・MYSQL_RANDOM_ROOT_PASSWORDのどれか1つが要ります。パスワードをリポジトリの変数から渡しているなら、その変数が入っているかを見ます(変数が空になる)。 - メモリ。サービスは、定義に
memory(128〜3072 MB)を書かない限り 1024 MB です。ページのトラブルシューティングも、まずここを見ています。Atlassian の Elasticsearch の例はmemory: 2048にして、Java のヒープを 512 MB に絞っています(ES_JAVA_OPTS: '-Xms512m -Xmx512m')。ステップ全体のメモリは増えません。1xで 4 GB を、ビルドのコンテナと分け合います(メモリの分け方)。
docker run の中から繋ぐとき
127.0.0.1 は、ビルドのコンテナの番地です。スクリプトが docker run で起こしたコンテナには別の localhost があり、そこにサービスはいません。Atlassian の記事 Connecting to a service container while inside a Docker container(英語・2025年9月26日更新)は、コンテナを --add-host=host.docker.internal:host-gateway つきで起こし、host.docker.internal のサービスのポートへ繋いでいます。ステップにはサービスと docker の両方を並べます。
- step:
services:
- postgres
- docker
script:
- docker run --add-host=host.docker.internal:host-gateway my-app \
psql postgresql://testuser:testpass@host.docker.internal:5432/testdb
サービスは5つまで、ポート 29418 は使えない
1つのステップに並べられるサービスは5つまでで、ポート 29418 は使えません。わけは、Atlassian の「Failed to connect to localhost port 29418」の記事(英語)にあります。ステップから自分のリポジトリへ push できるよう、Pipelines は git を localhost:29418 の内部のプロキシに向けています。
IntelliJ IDEA で Bitbucket Pipelines を見る
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを IDE のツールウィンドウに並べ、ステップ、失敗したステップと止まったコマンド、Bitbucket が書くそばから伸びるステップのログを見せます。一覧・ステップ・ログは無料。パイプラインの実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。
Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、Docker は Docker, Inc. の商標、MySQL は Oracle の商標、PostgreSQL は PostgreSQL Community Association の商標、Redis は Redis Ltd. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・Docker・Oracle・PostgreSQL Community Association・Redis・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Not authorized to perform sts:AssumeRoleWithWebIdentity」(OIDC で AWS) · テストの結果が出ない · 変数が空になる · 「Host key verification failed」(SSH) · 「Cannot connect to the Docker daemon」 · 「authorization denied by plugin pipelines」(Docker) · 「Container 'docker' exceeded memory limit.」 · push したのに Pipelines が動かない · 「Container 'Build' exceeded memory limit.」 · 「Exceeded build time limit of 120 minutes」 · キャッシュが効かない · 「unexpected system error」 · 「command not found」 · サブモジュールを取ってこない · 「We couldn't clone the repository」 · 「No online runner available」 · 「No space left on device」 · 「Step exceeded processing limits」 · 次のステップにアーティファクトが無い · 前は通ったビルドが今は落ちる · Build setup に時間がかかる · ビルド時間を使い切った · 「Permission denied to update branch」 · 「You have reached your pull rate limit」(Docker Hub) · 「There is an error in your bitbucket-pipelines.yml」 · 「This pipeline was paused」(デプロイ) · 「Container 'build' failed to pull image」 · IntelliJ IDEA の Bitbucket Pipelines 用プラグインの比較 · English