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

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

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

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



답변

현재 고정 표시기-작성 버전 3 , 당신은 단지 사용할 수있는 hostname필드 :

version: '3'
services:
  dns:
    hostname: 'your-name'


답변

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

$ 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


답변

을 사용할 때 호스트 이름이 다른 컨테이너에 표시되지 않는 것을 발견했습니다 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정의 된 별칭을 사용할 수 있도록 하려면 을 사용해야 합니다.


답변

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.ymlcontainer_name 문서 참조 에서 컨테이너 이름을 설정하는 것 입니다. docker-compose v1 +에 적용됩니다. 호스트 머신에서 컨테이너로가 아니라 컨테이너에서 컨테이너로 작동합니다.

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

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

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


답변

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

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

이제 작동합니다.

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test


답변