Подтвердить что ты не робот

Как установить имя хоста в Docker Compose?

В моем файле docker-compose.yml у меня есть следующее. Однако контейнер не получает значение имени хоста. Любые идеи?

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

Ответ 1

Я обнаружил, что имя хоста не было видно другим контейнерам при использовании docker run. Это оказывается известной проблемой (возможно, более известной особенностью), с частью обсуждения:

Возможно, нам следует добавить предупреждение в документы об использовании имени хоста. Я думаю, что это редко полезно.

Правильный способ присвоения имени хоста - с точки зрения контейнерных сетей - это определить псевдоним следующим образом:

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

К сожалению, это все еще не работает с docker run. Обходной путь должен назначить контейнеру имя:

docker-compose run --name alias1 some-service

И alias1 может затем alias1 из других контейнеров.

Ответ 2

Кажется, это работает правильно. Если я поместил вашу конфигурацию в файл:

$ 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

Ответ 3

Основано на документации докера: https://docs.docker.com/compose/compose-file/#/command.

Я просто помещаю hostname: <string> в мой файл docker-compose.

Например:

[...]

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

[...]

и контейнер lb01 выбирает at-lb01 как имя хоста.

Ответ 4

Мне нужно было закрутить контейнер freeipa, чтобы иметь работающий kdc, и я должен был дать ему имя хоста, иначе он не запустится. В конечном итоге у меня HOSTNAME установить переменную HOSTNAME env в compose:

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

Теперь это работает:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

Ответ 5

Самый простой способ, который я нашел, - это просто установить имя контейнера в docker-compose.yml См. Документацию по container_name. Это применимо к docker-compose v1+. Он работает для контейнера в контейнер, а не от хоста к контейнеру.

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

Теперь вы сможете получить доступ к affy из других контейнеров, используя имя контейнера. Я должен был сделать это для нескольких серверов Redis в среде разработки.

ПРИМЕЧАНИЕ Решение работает до тех пор, пока вам не нужно масштабировать. Такие как согласованные индивидуальные среды разработки.

Ответ 6

Я пробовал все это, и ни один из них не работал.

Я использую Ubuntu 18.04 LTS. Докер и все в актуальном состоянии на сегодня 26.04.199.

Я попытался вставить имя хоста: имя_сервера, а также параметры псевдонима в нескольких местах в разделе "samba" файла compose. В большинстве случаев опция псевдонима выдает ошибку, и я не могу запустить резервный контейнер samba, в других он запускается, но я до сих пор не могу получить доступ/найти имя сервера. Это раздражает, потому что это проблема безопасности для доступа/монтирования общих ресурсов по IP для меня, а также некоторые вещи просто не любят смотреть на диск, смонтированный на IP-адресе. Ниже приведен фрагмент моего файла. К вашему сведению, это не настоящие имена пользователей; пароли;)

 24   samba:
 25     image: dperson/samba
 26     environment:
 27       TZ: 'EST5EDT'
 28     networks:
 29       - default
 30     ports:
 31       - "137:137/udp"
 32       - "138:138/udp"
 33       - "139:139/tcp"
 34       - "445:445/tcp"
 35     read_only: true
 36     tmpfs:
 37       - /tmp
 38     restart: unless-stopped
 39     stdin_open: true
 40     tty: true
 41     volumes:
 42       - /media/files:/media/files:z
 43       - /media/media:/media/media:z
 44     command: '-u "user;pswd;1000" -u "readonly;pswd" -s "files;/media/files;yes;yes;no;all;joel;joel"
 45
 46 networks:
 47   default: