docker, получить имя контейнера, а не идентификатор контейнера в nodejs - PullRequest
0 голосов
/ 04 октября 2019

Я уже видел ответ по этому url , но он фактически возвращает идентификатор контейнера вместо имени контейнера.

Код с URL

const os = require('os');
console.log( os.hostname() ); 

В Docker,идентификатор контейнера - это длинная строка, которая выглядит как 4e600c35e164...

, в то время как имя контейнера - это значимое имя, данное этой машине, например, customer, и это то, что я пытаюсь получить в nodejs.

docker-compose

customerservice:
    image: node:10
    container_name: customer
    command: bash -c "npm install && npm install nodemon -g && nodemon --exec npm start"
    ports:
      - 3000:3000

1 Ответ

1 голос
/ 04 октября 2019

Я думаю, что вы не можете сделать это без привязки файла docker.sock вашего хоста к контейнеру, который позволяет вам запускать команды Docker или связываться с API докера изнутри контейнера. См., Например, this . Обратите внимание, что для этого требуется установить докер в контейнере и что это сопряжено с угрозами безопасности. Не очень хороший вариант.


В качестве альтернативы можно было бы просто добавить переменную окружения (и вручную установить ее так, как вам нужно) в ваш контейнер с помощью клавиши environmentв docker-compose.yaml.


И, наконец, если у вас все в порядке с изменением вашего файла композиции, вы можете использовать недавнюю функцию: шаблонные конфигурации докеров. Идея в том, что конфиг - это файл, который доступен в контейнере. Он может быть шаблонным, например, он может выглядеть как

{{ .Name }}

, который будет заменен именем вашего контейнера (попробуйте запустить docker container inspect <container_name>, чтобы увидеть это Name. Вы можете создать эту конфигурацию один раз, используя

docker config create --template-driver golang <config_name> <path/to/file>

, а затем используйте его в каждом отдельном контейнере, добавив раздел configs: в корне файла compose, который указывает на вашу внешнюю конфигурацию, и свяжите его с вашими контейнерами (обратите внимание на версию файла compose). , Я думаю, вам нужно, по крайней мере, 3.7:

# docker-compose.yaml
version: '3.7'

configs:
  <config_alias_inside_this_file>:
    external: true
    name: <config_name>

services:
  <service_name>:
    configs:
      - source: <config_alias_inside_this_file>
        target: <path/inside/container>
        # uid: '1000'  # You can set file mode, owner uid and group gid
        # gid: '1000'  # here if you need to, check the "long syntax" subsection
        # mode: 0644   # at https://docs.docker.com/compose/compose-file/#configs
    ...

К сожалению, вы не можете создавать шаблонные конфигурации из файла компоновки (пока), но на самом деле это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...