실행중인 컨테이너의 호스트 이름을 지정하는 방법은 무엇입니까?


51

실행중인 도커 컨테이너에서 호스트 이름을 설정하는 데 문제가 있습니다. 이미지가 시작된 호스트 이름을 지정하는 방법을 이해하는 데 문제 가 있습니다.

다운로드 한 이미지에서 컨테이너를 시작했습니다.

sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss

그러나 나는 통해 호스트 이름을 지정하는 것을 잊었다 -h; 컨테이너가 실행 중이므로 호스트 이름을 어떻게 지정할 수 있습니까?


컨테이너를 중지하고 호스트 이름을 제공하여 다시 시작할 수 있습니까?
dawud

AFAIK run는 컨테이너를 시작할 때가 아니라 이미지 일 때만 작동합니다 .
미구엘 핑

때때로 당신이 원하는 것은 적절한 이름으로 bash 명령 프롬프트를 보는 것입니다. 이 경우 .bashrc에서 PS1 값을 편집 할 수 있습니다. 제안 사항 은 askubuntu.com/a/549150/55365 를 참조하십시오. PS1에서 서버 또는 서비스 이름으로 * 또는 #으로 둘러싸인 (컬러) 문자열을 추가하여 구분할 수 있습니다.
SPRBRN

@dawud 당신은 docker restart 문서를
dangonfast

답변:


48

편집 /etc/hostname은 컨테이너 내부에서 ssh 액세스가 필요한 것 중 하나입니다. 그렇지 않으면 -h옵션으로 컨테이너를 회전시킬 수 있습니다 .

호스트 및 도메인 이름을 설정하려면

$ docker run -h foo.bar.baz -i -t ubuntu bash
root@foo:/# hostname
foo
root@foo:/# hostname -d
bar.baz
root@foo:/# hostname -f
foo.bar.baz

5
당신은 할 수 있습니다 docker exec /bin/bash실행중인 컨테이너에 필요가 설치 없습니다 ssh(관리 목적에 대한 나쁜 관행 이럴이다).
jjmontes

주소로 올바르게 확인 된 / etc / hosts를 편집 할 수도 있습니다.
dtoubelis

2
hostname(결측 기능)을 사용하여 실행중인 컨테이너에서 호스트 이름을 변경할 수 없습니다 . 실행 docker run -h <hostname> <image> <container-name>하면 지정된 호스트 이름 으로 컨테이너가 작성 됩니다.
dangonfast

6

컨테이너 및 서비스 중지

sudo docker stop CONTAINER_NAME
sudo service docker stop

구성 파일 편집 (JSON) [먼저 백업해야합니다]

/var/lib/docker/containers/CONTAINER_ID/config.json

바꾸다

"호스트 이름": "무엇"

"호스트 이름": "NEW_HOSTNAME"

컨테이너 및 서비스 시작

sudo service docker start
sudo docker start CONTAINER_NAME

(선택적으로 도커를 연결할 수도 있습니다)

sudo docker attach CONTAINER_NAME

도커에 대한 세부 사항 (예 : CONTAINER_NAME, CONTAINER_ID)은 다음을 실행하여 얻을 수 있습니다.

sudo docker ps -a

작동하지 않습니다. 컨테이너를 시작할 때마다 덮어 씁니다.
Ahmed

이상하다. 방금 이러한 단계를 재현했으며 여전히 작동합니다. 도커 버전 1.7.1. 파일을 편집하기 전에 컨테이너와 서비스를 닫았습니까?
Tomot

/ etc / hostname을 편집하지 않은 Docker 17.04.0-ce에서 작동합니다. 컨테이너를 아직 만들지 않은 경우 -h를 사용하는 다른 대답이 더 낫지 만 컨테이너의 경우 이미 문제가 발생하여 호스트 이름을 설정하기 위해 컨테이너를 다시 만들고 싶지 않았습니다.
Una

작동하지 않습니다Docker version 17.05.0-ce, build 89658be
dangonfast

4

컨테이너를 다시 시작하는 것이 가장 쉬운 옵션이지만 / etc / hostname을 편집하여 그 위치로 이동할 수도 있습니다.


/etc/hostnamedocker가 관리하는 "실제"호스트 이름으로 매번 덮어 쓰기 때문에 다시 시작한 후에는 편집 이 적용되지 않습니다. hostname컨테이너에는 해당 작업을 수행 할 수있는 기능이 없으므로 컨테이너에서 실행할 수 없습니다 (기본적으로 변경하지 않으려는 경우)
dangonfast

/etc/hostname컨테이너를 편집 하고 다시 시작하지 않아도됩니다.
dangonfast


1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces 는이를 수행하는 방법을 설명합니다. 기본 아이디어는 docker inspect컨테이너의 pid를 얻는 데 사용 하고를 통해 컨테이너의 uts 네임 스페이스를 입력하는 것 nsenter입니다. hostname해당 네임 스페이스 내에서 실행 하면 해당 네임 스페이스를 공유하는 도커 인스턴스의 호스트 이름이 변경됩니다.


2
사라질 수있는 외부 링크가 아닌 여기에 직접 솔루션을 추가하십시오
Orphans

0

다른 사람들이 지적했듯이 config.v2.json파일 을 수정하여 컨테이너에 대해 변경할 수 있습니다 .

파일을 편집하기 전에 Docker 서비스가 중지되었는지 확인하십시오. 그렇지 않으면 덮어 쓰기됩니다. 단계는 반드시이 순서대로 수행해야합니다

  • 컨테이너를 중지
  • Docker 서비스 중지
  • /var/lib/docker/containers/CONTAINER_ID/config.v2.json--파일 수정

  • Docker 서비스를 시작하십시오

  • 컨테이너를 시작

이것은 Docker v17.05.0-ce에서을 사용하는 컨테이너에서 작동하는 것으로 확인되었습니다 --net=host. /etc/hostname파일 수정이 작동하지 않고 파일을 덮어 씁니다.


-3

에서

 /var/lib/docker/containers/CONTAINER/config.json

찾아서 설정

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}

작동하지 않습니다 Docker version 17.05.0-ce, build 89658be. 어디에서 누가 구성을 덮어 씁니다. 다시 시작한 후 호스트 이름 자체는 변경되지 않습니다.
dangonfast
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.