Jenkinsfile связывает открытые порты из одного контейнера с локальным узлом в другом связанном контейнере

У меня есть сервис, который выставляет определенные порты. Я хочу, чтобы контейнер этой службы был связан с подчиненным контейнером Jenkins и чтобы те же порты были доступны на локальном узле подчиненного контейнера Jenkins.

docker.image('some-service').withRun() { l ->
  docker.image('jenkins-slave').inside("--link ${l.id}:my-service") {
    echo "Exposed ports from some-service are available on localhost on jenkins-slave"
  }
}

Как мне это сделать? Спасибо

1 ответ

Связывание контейнеров не публикует порты на локальном хосте, но вместо этого соединяет частные сети между двумя контейнерами. Используя приведенный выше пример, открытые порты (EXPOSE синтаксис в Dockerfile) включен some-service будет доступен для jenkins-slave контейнер, использующий имена хостов для обнаружения:

$ nc my-service 8080

Docker также внедрит целую кучу переменных среды. Чтобы увидеть это без Дженкинса, просто запустите несколько контейнеров вручную.

Сначала запустите сервисный контейнер как демон:

$ docker run --rm -d --name some-service tutum/hello-world
d26f4f768218006060e5bed6f228a979be51246722f70e2bc75db73b9d21fd62

Затем запустите Alpine контейнер:

$ docker run --link some-service:my-service -it alpine:3.7 sh

Оформить заказ среды:

/ # env
MY_SERVICE_PORT_80_TCP=tcp://172.17.0.6:80
HOSTNAME=b1a44bdfa022
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MY_SERVICE_PORT=tcp://172.17.0.6:80
MY_SERVICE_NAME=/vigilant_beaver/my-service
MY_SERVICE_PORT_80_TCP_ADDR=172.17.0.6
PWD=/
MY_SERVICE_PORT_80_TCP_PORT=80
MY_SERVICE_PORT_80_TCP_PROTO=tcp

Подключитесь к зависимому сервису:

/ # wget -q -O- http://my-service/
<html>
<head>
    <title>Hello world!</title>
    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
    <style>
    body {
        background-color: white;
        text-align: center;
        padding: 50px;
        font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
    }

    #logo {
        margin-bottom: 40px;
    }
</style>
</head>
<body>
    <img id="logo" src="logo.png" />
    <h1>Hello world!</h1>
    <h3>My hostname is d26f4f768218</h3>    </body>
</html>

Если ваша сеть нуждается в усложнении, рассмотрите возможность настройки сети Docker.

Ура!

Другие вопросы по тегам