8800
bağlantı noktasında basit bir HTTP echo hizmeti başlatan bir docker-compose.yml
dosyam var.Docker oluşturucu kapsayıcı içinde oluşturulamıyor.
version: '2'
services:
echo-server:
image: luisbebop/echo-server
container_name: echo-server
ports:
- "8800:8800"
Super simple stuff. Ben docker-compose up
çalıştırmak ve benim yerel makinede çalıştırırsanız:
echo "Hello World" | nc 127.0.0.1 8800
Sonra yankı bkz.
Ancak: Bu oluşturucu senaryosunu GitLab koşucusu aracılığıyla bir docker kabının içinde çalıştırırsam başarısız olur.
https://gitlab.com/gitlab-org/gitlab-ce/issues/26566
Benim .gitlab-ci.yml
dosya benziyor:
Ben ancak sınırlı sonuçlar ile, burada GitLab de bu konuya dikkat çekerler denedim
---
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
Ve gitlab-ci-multi-runner exec docker --docker-privileged docker_test
çıktısı:
$ netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
$ docker-compose port echo-server 8800
0.0.0.0:8800
$ echo "Hello world" | nc 127.0.0.1 8800
ERROR: Build failed: exit code 1
Bu portlar rıhtımdan sorumlu docker konteynerinin içinde bulunmuyor gibi görünüyor r-hizmetleri oluşturmak. Yanlış bir şey mi yapıyorum? Yapmam
yerine sadece bağlantı noktaları o kaba mevcut yapı, çalışan liman işçisi konteyner tarafından açalım mı, konak düzeyinde maruz portları istemiyor.
Host (My Mac) -> GitLab CI Container -> Docker Compose Container exposing 8800
^Not here ^I want port 8800 accessible here
Düzenleme:
/ # 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
yüzden kabı "görür" ve liman eşleştirmeleri iyi görünüyor, ama: Ben çalışan CI kaba bir kabuk bağlamak eğer Ayrıca, görüyorum Liman aslında dinlemiyor. Ben, onun konak yanlış olmazsam
services:
- docker:dind
:
Bu şey "içeride" liman işçisi hala dışarıda liman işçisi motoru üzerinde çalışan olmasıdır - Böylece bağlantı noktası aslında "kök" ana makine makinesinin localhost'una bağlanır. Bununla birlikte, docker-compose dosyasında kullanılacak docker ağını belirtebilmeli ve docker ağının GitLab kabına bağlı olduğunu belirleyebilmelisiniz. Önceki yorumuma 'nc echo-server 8800' –
' a bağlanabileceksiniz, büyük olasılıkla GitLab konteyner 'köprüsünü 'kullanacaktır. Docker-compose.yml öğesindeki 'echo-server' için' network_mode: bridge' ekleyin. Daha sonra komutları 'nc echo-server 8800' olarak değiştirin. Hala alan adını çözemeyebilir. Bu durumda IP'yi '$ (docker inspect -f '{{range .NetworkSettings.Networks}} {{ile edinebilirsiniz.IPAddress}} {{end}} 'echo-server' –
Merhaba @ LukášDoležal, bu durumdan tamamen emin değilim. "Köklü" ana makinede "docker ps" çalıştırırsam iki kapsayıcı görüyorum - docker: dind servisi ve "docker: en son" görüntüsü. "Docker: dind" konteynerinin içinde docker ps'yi çalıştırırsam, "docker-compose" ile başlatılan üç kapsayıcıyı görüyorum - böylece iki kap kümesi bağımsız görünüyor. Ayrıca, çalışmakta olduğunu bilmeme rağmen "root" ana bilgisayarından (Mac'im) "8800" üzerindeki web hizmetine erişemiyorum. (Ama ben sadece 'docker-compose' komutunu çalıştırırsam, sorunun üst kısmında görüldüğü takdirde yapabilirim.) –