Как я могу связать мою установку GitLab с бегуном, который работает в отдельных контейнерах докеров?
GitLab работает нормально, до него можно добраться через http: //docker.lcnet: 8181
Моя первая проблема в том, где я могу найти свой URL-адрес Gitlab "CI"? или это просто мой обычный URL? Должен ли я включать порт?
Я использую этот документ: https://docs.gitlab.com/ce/ci/docker/using_docker_images.html
Вот что я получаю:
ubuntu@docker:~$ sudo docker exec -it gitlab-runner gitlab-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://docker.lcnet:8181
Please enter the gitlab-ci token for this runner:
<token from settings>
Please enter the gitlab-ci description for this runner:
[5bf3c5086904]: my-runner
Please enter the gitlab-ci tags for this runner (comma separated):
tag1
ERROR: Registering runner... failed runner=hm-eFuar status=couldn't execute POST against http://docker.lcnet:8181/ci/api/v1/runners/register.json: Post http://docker.lcnet:8181/ci/api/v1/runners/register.json: dial tcp: lookup vader.nts on 8.8.8.8:53: no such host
PANIC: Failed to register this runner. Perhaps you are having network problems
Я вижу, что есть проблемы с сетью, но после нескольких часов поиска я не смог найти подходящего подсказки для решения этой проблемы. Я знаю, что образы докеров могут связываться друг с другом через имена докеров, но нигде не упоминается, как это настроить.
Я попытался ввести "gitlab-ce" (это имя контейнера докеров, в котором запущен gitlab), но это не сработало.
Нужно ли мне создавать сеть докеров?
Итак, после более глубокого погружения в докер, я понял, что мне нужно связать контейнер-бегун с контейнером GitLab с помощью «ссылки».
Это то, чего не хватает в документации выше. Хотя в нем говорится, что запуск Gitlab и бегуна на одном компьютере не рекомендуется (что, я думаю, также решило бы проблему), в некоторых сценариях это необходимо, поэтому было бы неплохо упомянуть, что контейнеры должны быть связаны:
$ docker run -d -P --name gitlabce gitlab/gitlab-ce:latest
$ docker run -d -P --name runner --link gitlabce:gitlabce gitlab/gitlab-runner:latest
$ docker exec -it runner gitlab-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlabce
Please enter the gitlab-ci token for this runner:
(your token from gitlab->admin->runner)
Please enter the gitlab-ci description for this runner:
[a11fa3f389d9]:
Please enter the gitlab-ci tags for this runner (comma separated):
Registering runner... succeeded
Я новичок в докере, извиняюсь за этот тривиальный вопрос, но, возможно, это поможет другим.
Другой метод - создание сети, определяемой пользователем, поскольку, если я правильно понял, контейнеры могут взаимодействовать друг с другом без ссылок.
В вашем случае я бы выставил 8181 на хосте Docker. Таким образом, они могут общаться по внешнему IP-адресу хоста Docker. Эта команда должна зарегистрировать Runner (обновить токен и IP в нем):
docker exec gitlab-runner gitlab-runner register --non-interactive --name "docker-runner-1" --url "http://docker.lcnet:8181" --registration-token <token> --docker-image="docker:17.03.1-ce" --docker-extra-hosts="docker.lcnet:<the external IP of the host>" --executor=docker --docker-volumes /var/run/docker.sock:/var/run/docker.sock
В моем случае мне пришлось указать IP-адрес своего сетевого моста, и это сработало.
Я видел сеть gitlab со следующим:
$docker container inspect $id
Затем, когда я регистрируюсь, я помещаю IP-адрес gitlab с сетевого моста
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://$ip