
내 호스트:
» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
내 도커:
» docker --version
Docker version 17.05.0-ce, build 89658be
내가 시도한 것:
1) 컨테이너에 호스트 이름 설정: 컨테이너에 올바른 기능이 부족하여 실패합니다.
root@172:/# hostname something
hostname: you must be root to change the host name
2) /etc/hostname
컨테이너에서 수동 편집: 컨테이너를 다시 시작한 후에는 효과가 없으며 다시 시작하지 않으면 아무 의미도 없습니다.
3) 컨테이너 구성을 수동으로 편집합니다. 작동하지 않습니다. 이유는 알 수 없습니다.
sudo vi /var/lib/docker/containers/834787a141d73b359814055b5fc0ba3e1cc52effeb6f916e2adece297d600772/config.v2.json
4) 설명된 대로 네임스페이스 도구를 사용하여 호스트에서 컨테이너의 호스트 이름을 변경합니다.여기Ubuntu 16.04.4 LTS
: 네임스페이스 도구에 액세스할 수 없으므로 불가능합니다 .
다른 어떤 옵션이 있나요?
이론적 해석
GitLab은 리포지토리를 복제하기 위해 현재 호스트 이름을 GitLab 실행기에 전달하는 것 같습니다. 기본 네트워크에서는 이름으로는 컨테이너에 접근할 수 없고 IP 주소로만 접근할 수 있습니다. 즉, gitlab 컨테이너의 호스트 이름을 IP 주소로 설정해야 하지만 이미 실행 중인 경우에만 IP 주소를 갖게 됩니다. 따라서 유일한 해결책은 다음과 같습니다.
- 컨테이너 실행
- IP 주소를 알아보세요
- IP 주소로 호스트 이름을 덮어씁니다.
- 이제 gitlab과 gitlab runer가 서로 대화할 수 있습니다.
다른 (깨끗한) 옵션은 사용자 정의 네트워크에서 컨테이너(gitlab 및 gitlab-runner)를 시작하여 실제 호스트 이름으로 접근할 수 있도록 하는 것이지만 현재는 gitlab 러너가 시작한 컨테이너가 그렇지 않다는 문제가 있습니다. 사용자 정의 네트워크를 사용할 때 실행기가 생성한 필수 컨테이너 서비스에 도달할 수 있습니다.
답변1
귀하의 문제에 대한 답변이 잘못되었지만 귀하가 요구하는 답변은 다음과 같습니다.
다음과 같은 옵션을 사용하여 컨테이너를 생성할 때 호스트 이름을 설정할 수 있습니다.
docker run --hostname example.com image_name
왜 이것이 잘못된 대답입니까? 컨테이너를 명명된 애완동물이 아닌 소로 취급해야 하기 때문입니다. 컨테이너를 스웜 스택으로 실행하거나 docker compose를 사용하여 실행하는 경우 서비스 이름을 사용하도록 gitlab과 실행기를 조정하세요. 또는 를 사용하여 컨테이너를 시작하는 경우 docker run
컨테이너 이름을 사용할 수 있지만 더 쉽게 업데이트할 수 있도록 가능한 한 빨리 서비스로 전환하는 것이 좋습니다.
위의 문제에 대한 더 나쁜 솔루션의 경우 컨테이너 내부에서 자체 호스트 이름을 변경할 수 있도록 컨테이너에 기능을 추가할 수 있습니다. 이는 보안 취약점을 야기하므로 보안이 중요한 환경에는 권장되지 않습니다.
docker run --cap-add SYS_ADMIN ...
답변2
쉽게 업데이트하려면 Docker 호스트 시스템에서 수행하세요. docker run 명령과 함께 이와 같은 옵션을 사용하십시오.
-v ./hosts:/etc/hosts -v ./hostname:/etc/hostname
컨테이너 내부로 들어가 파일을 업데이트하지 않고도 호스트 컴퓨터에서 파일을 업데이트할 수 있습니다.