2017-07-29 62 views
6

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 

:

+0

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' –

+0

' 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' –

+0

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.) –

cevap

6

konteyner "liman işçisi konak" sizin durumunuzda olduğu, Gitlab yapı destekleyen diğer kabın çalışıyorsa ad docker. Yani bu şekilde erişimi:

echo "Hello world" | nc docker 8800 

liman işçisi cini ev sahipliği yapmaktadır anlamak üzere, bunu kullanın:

script: 
    - echo $DOCKER_HOST 
+2

Bunu yaptı. Son Docker sorularımda 2 için 2'sin. ~ ~ 23 saat içinde Bounty. –

+0

Bunu duyduğuma sevindim! @CraigOtis, çok teşekkürler;)! – Robert