Назад | Перейти на главную страницу

Подключите GitLab и Gitlab runner, оба в Docker

Как я могу связать мою установку 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