8800
で簡単なHTTPエコーサービスを開始するdocker-compose.yml
ファイルがあります。ドッカー内で作成されたドッキング用コンテナにアクセスできない
version: '2'
services:
echo-server:
image: luisbebop/echo-server
container_name: echo-server
ports:
- "8800:8800"
スーパーシンプルなもの。 docker-compose up
を実行してローカルマシンで実行した場合:
echo "Hello World" | nc 127.0.0.1 8800
次にエコーが表示されます。 ただし: GitLabランナーを使用してドッキング・コンテナー内で同じ構成シナリオを実行すると、失敗します。 https://gitlab.com/gitlab-org/gitlab-ce/issues/26566
マイ.gitlab-ci.yml
ファイルは次のようになります:
は、私は限られた結果と、ここにGitLabで、この問題のために注目を集めるために試してみた
---
stages:
- docker_test
services:
- docker:dind
docker_test:
stage: docker_test
image: docker:latest
script:
- docker version
- apk update
- apk add py-pip
- pip install docker-compose
- docker-compose up -d
- sleep 10
- netstat -tulpn
- docker-compose port echo-server 8800
- echo "Hello world" | nc 127.0.0.1 8800
そしてgitlab-ci-multi-runner exec docker --docker-privileged docker_test
の出力は次のようになります。
ドックを担当しているドッカーのコンテナ内にこれらのポートがないようですr編成サービス。私は何か間違っているのですか?
私はむしろ、私はちょうどポートがそのコンテナに利用できるビルドを、実行中のドッキングウィンドウコンテナでを開けたい、ポートがホストレベルで露出たくないん。
Host (My Mac) -> GitLab CI Container -> Docker Compose Container exposing 8800
^Not here ^I want port 8800 accessible here
編集:私は実行されているCIコンテナにシェルを取り付けた場合はまた、私は次を参照してください。
/ # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab192edf5872 luisbebop/echo-server "/opt/echo-server/..." 2 minutes ago Up About a minute 0.0.0.0:8800->8800/tcp echo-server
/# netstat -nltup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
だから、コンテナを「見る」、およびポートマッピングは大丈夫に見えますが、ポートは実際にリッスンしていません。
このことは、「内部」ドッキングウィンドウは、まだ外ドッカエンジン上で動作するということです - ポートバインドは実際には "ルート"ホストマシンのローカルホストにバインドされます。ただし、docker-composeファイルで使用するドッカーネットワークを指定し、GitLabコンテナに接続されているドッカーネットワークを設定できます。あなたは 'nc echo-server 8800' –
に私の前のコメントに接続することができます.GitLabのコンテナは' bridge'ネットワークを使うでしょう。 docker-compose.ymlの 'echo-server'に' network_mode:bridge'を追加してください。コマンドを 'nc echo-server 8800'に変更します。それでもドメイン名が解決されないことがあります。その場合、 '$(docker inspect -f '{{range .NetworkSettings.Networks}} {{。IPAddress}} {{end}} 'echo-server) ' –
こんにちは@LukášDoležal、私は完全にそうであるとは思わない。 "root"ホストマシンで 'docker ps'を実行すると、' docker:dind'サービスと 'docker:latest'イメージの2つのコンテナが表示されます。 'docker:dind'コンテナの中で' docker ps'を実行すると、 'docker-compose'で開始された3つのコンテナが表示されます。さらに、「ルート」ホスト(私のMac)から、実行中であるにもかかわらず、私が8800上のWebサービスにアクセスすることができません。 (質問の先頭にあるように、 'docker-compose'を手動で実行しても問題ありません。) –