Можно ли определить имя хоста Docker из контейнера?

Это своего рода дублирующий вопрос для вот этот. . Но по иронии судьбы, несмотря на название этого вопроса, все ответы говорят: используйте переменную ENV.

Мой вариант использования: я не знаю, работает ли докер через docker-compose или swarm. Однако это не будет запуск докеров! Я пытаюсь запустить сценарий обновления, который находится на хосте. Таким образом, изнутри контейнера мне нужно имя хоста докера. Есть ли какой-либо программный способ получить это БЕЗ переменных среды?


person JoeG    schedule 03.08.2017    source источник


Ответы (3)


Нет. Цель докера — максимально изолировать хост-среду. Единственный способ получить имя хоста — это передать его в контейнер как переменную (или привязать файл, содержащий имя хоста, и т. д.).

Я не знаю, работает ли докер через docker-compose или swarm. Однако это не будет запуск докеров! Я пытаюсь запустить сценарий обновления, который находится на хосте.

Какая вам разница, как был запущен контейнер? Как вы планируете запускать скрипт на хосте? Ответы на эти вопросы могут помочь нам дать лучший ответ на ваш первоначальный вопрос.

person larsks    schedule 04.08.2017
comment
Под я не знаю, работает ли докер... или роится, я имел в виду, что мне все равно, как запускается контейнер. Если вы знаете ЛУЧШИЙ способ запуска удаленного сценария, сообщите мне об этом; однако с ЛЮБЫМ таким механизмом, который я знаю, мне нужно имя/IP-адрес этого хоста, поэтому мой вопрос - person JoeG; 07.08.2017

Вот запрос функции, который был реализован в 17.10 https://github.com/moby/moby/issues/30966

Вот как вы это делаете:

$ hostname testing123

$ docker service create \
  --name foo \
  --hostname "{{.Service.Name}}-{{.Task.Slot}}-{{.Node.Hostname}}" \
  nginx:alpine

 $ docker inspect foo.1.k51r3eclvcelsxy6jthtavkwa --format 
   '{{.Config.Hostname}}'
   foo-1-testing123

Это также должно работать в docker-compose

services:
  nginx:
    image: nginx
    hostname: '{{.Node.Hostname}}'
person Ich    schedule 13.11.2017

Если вы используете Docker для Mac, вы можете использовать следующее имя хоста:

docker.for.mac.localhost

person Jacob Thomason    schedule 26.11.2018