docker-compose에서 호스트 이름을 어떻게 설정합니까?


120

docker-compose.yml파일에는 다음이 있습니다. 그러나 컨테이너는 호스트 이름 값을 선택하지 않습니다. 어떤 아이디어?

dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock

컨테이너에서 호스트 이름을 확인할 때 선택하지 않습니다 affy.


1
어떤 버전의 Compose를 사용하고 있습니까?
kojiro

답변:



57

이것은 올바르게 작동하는 것 같습니다. 구성을 파일에 넣으면 :

$ cat > compose.yml <<EOF
dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock
EOF

그리고 다음을 불러옵니다.

$ docker-compose -f compose.yml up
Creating tmp_dns_1...
Attaching to tmp_dns_1
dns_1 | 2015-04-28T17:47:45.423387 [dockerdns] table.add tmp_dns_1.docker -> 172.17.0.5

그런 다음 컨테이너 내부의 호스트 이름을 확인하면 모든 것이 정상인 것 같습니다.

$ docker exec -it stack_dns_1 hostname
affy.affy.com

1
어떤 버전의 Compose를 사용하고 있습니까?
kojiro

이 형식은 최신 버전의 docker-compose에서 작동하지 않습니다. YML 파일은 까다로운 것들입니다. 이것이 DNS에 적합한 형식이라고 확신합니까?
조지 스토커

3
YML 파일은 실제로 그렇게 까다로운 것은 아닙니다. "작동하지 않음"은 무엇을 의미합니까? 문서 에 따르면 hostname및 둘 다 domainname유효한 docker-compose.yml옵션입니다. 업데이트 : 방금 테스트했지만 여전히 잘 작동하는 것 같습니다 (docker-compose 버전 1.4.2, 도커 버전 1.8.2).
larsks

이 호스트 이름을 도커 환경 외부에 노출하는 방법이 있습니까? 호스트가 DNS 이름으로 도커 컨테이너에 액세스 할 수 있다면 좋을 것입니다.
Paul Praet

1
그것은 가능하며 아마도 자체 질문의 가치가 있습니다. "docker dns"를 검색하면 몇 가지 관련 결과를 찾을 수 있습니다. 먼저 거기에 무엇이 있는지 살펴보십시오.
larsks

53

을 사용할 때 호스트 이름이 다른 컨테이너에 표시되지 않는 것을 발견했습니다 docker run. 이것은 알려진 문제 (아마도 더 알려진 기능)로 밝혀졌으며 토론의 일부는 다음과 같습니다.

호스트 이름 사용에 대한 경고를 문서에 추가해야 할 것입니다. 거의 유용하지 않다고 생각합니다.

컨테이너 네트워킹 측면에서 호스트 이름을 할당하는 올바른 방법은 다음 과 같이 별칭정의하는 것입니다.

services:
  some-service:
    networks:
      some-network:
        aliases:
          - alias1
          - alias2

불행하게도이 여전히 작동하지 않습니다 docker run. 해결 방법은 컨테이너에 이름을 할당하는 것입니다.

docker-compose run --name alias1 some-service

그런 alias1다음 다른 컨테이너에서 ping 할 수 있습니다.

업데이트 : @grilix가 지적했듯이 docker-compose run --use-aliases정의 된 별칭을 사용할 수 있도록 하려면 을 사용해야 합니다.


11
다른 컨테이너에서 hosname으로 컨테이너에 액세스 할 수 없다는 문제에 봉착했습니다. 그리고 당신은 전체 인터넷에서이 문제를 언급 한 유일한 사람입니다. 이미 20 시간 동안 인터넷 검색을 해왔습니다
holms

7
여기도 마찬가지입니다! 수백만 명의 개발자가 Docker를 사용하는 것처럼 보이지만 아무도 상자에 간단한 이름을 지정하는 방법을 모릅니다. 공식 문서조차도 모릅니다. 정말 감사합니다 :)
Sliq

1
이런 경우에, 지금 우리가 사용할 수 있습니다 --use-aliasesdocker-compose run. 이렇게하면 run명령 에서 별칭을 하드 코딩하지 않아도됩니다.
grilix

38

Docker 문서 기반 : https://docs.docker.com/compose/compose-file/#/command

hostname: <string> 도커 작성 파일을 간단히 넣습니다 .

예 :

[...]

lb01:
  hostname: at-lb01
  image: at-client-base:v1

[...]

컨테이너 lb01이 at-lb01호스트 이름으로 선택됩니다 .


docker-compose 파일에 여러 컨테이너가있는 경우 각 컨테이너의 호스트 이름을 설정 하시겠습니까? 매우 비효율적 인 것 같나요?
vgoklani

6
실행 가능한 솔루션 인 컨테이너에 대해 잘 알려진 이름이 필요한 경우.
Marcello Romani

9

내가 찾은 가장 간단한 방법 docker-compose.ymlcontainer_name 문서 참조 에서 컨테이너 이름을 설정하는 것 입니다. docker-compose v1 +에 적용됩니다. 호스트 머신에서 컨테이너로가 아니라 컨테이너에서 컨테이너로 작동합니다.

services:
  dns:
    image: phensley/docker-dns
    container_name: affy

이제 affy컨테이너 이름을 사용하여 다른 컨테이너에서 액세스 할 수 있습니다 . 개발 환경에서 여러 redis 서버에 대해이 작업을 수행해야했습니다.

참고 솔루션은 확장 할 필요가없는 한 작동합니다. 일관된 개별 개발자 환경과 같은.


에서 Compose 3.7유일한 방법은 내가 같은 스택의 다른 서비스 컨테이너 내에서 볼 수있는 데이터베이스 서비스의 호스트 이름을 가지고하는 호스트 이름과 서비스 이름을했다. hostname:속성을 사용 하지 못했습니다. HOSTNAME = 환경을 사용하는 것도 실패했습니다.
Stephane 2019

또한 효과가 있었던 또 다른 솔루션 aliasesfoz솔루션에 설명 된대로 속성 을 사용 하는 것입니다.
Stephane

1
이 잘 작동하지만, 조금 지저분 - 지금 설정으로 찍은 container_name하고 hostname무엇을 달성하기 위해 동일한 값으로 내가 필요
올리버 던 제이

3

나는 작동하는 kdc를 갖기 위해 freeipa 컨테이너 를 회전 시켜야 했고 그렇지 않으면 실행되지 않을 호스트 이름을 제공해야했습니다. 결국 나를 위해 일한 HOSTNAME것은 compose 에서 env 변수를 설정하는 것입니다 .

version: 2
services:
  freeipa:
    environment:
      - HOSTNAME=ipa.example.test

이제 작동합니다.

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
나를 위해, 슬림 사용하여 해당 컨테이너의 실제 호스트 이름에 전혀 효과가없는 HOSTNAME 환경 변수의 결과
올리버 던 제이

2
이것이 사용중인 컨테이너에서 작동했을 수 있지만 환경 지시문은 컨테이너에 변수 만 노출합니다. 설정된 값으로 작업을 수행하는 것은 여전히 ​​컨테이너에 달려 있습니다. 대부분의 경우 아무것도하지 않을 것입니다.
MrJohnBBQ

env var를 노출하는 것은 컨테이너의 호스트 이름과 관련이 없으며 두 개의 별도 영역입니다.
Marcello Romani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.