В качестве эксперимента я устанавливаю переменные среды в своем контейнере Docker двумя способами: используя параметр -e
и используя файл environment
, смонтированный в /etc/environment
внутри контейнера. В файле есть одна строка:
FROM_ENV_FILE=true
Моя команда docker run
:
docker run -de FROM_CMD_LINE=true -v $(pwd)/environment:/etc/environment ubuntu:14.04 sleep infinity
Когда я запускаю docker exec b20543b507e3 cat /etc/environment
, я вижу, что этот файл смонтирован правильно и содержит мое значение, однако я вижу только установленное FROM_CMD_LINE
при запуске printenv
, поэтому кажется, что мой файл /etc/environment игнорируется.
Мой вопрос заключается не только в том, почему /etc/environment не работает в моем образе докера ubuntu:14.04?. Я ищу ответ, который объясняет, что Docker делает для настройки среды процесса, чтобы сделать доступными пользовательские переменные среды, переданные через -e
, для всех запущенных процессов в контейнере, поэтому я надеюсь понять, почему /etc/environment
игнорируется в контейнер.
Соответствующие сведения о времени выполнения, с которыми я работаю, вставлены ниже.
docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:13:02 2018
OS/Arch: darwin/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:22:38 2018
OS/Arch: linux/amd64
Experimental: true
Глядя на примечания к выпуску для 18.03.1-ce :
Containerd: обновление до версии 1.0.3 moby/moby#36749
Сейчас я копаюсь в исходном коде containerd
, но я надеялся, что кто-то, уже знакомый со средой выполнения контейнера, сможет мне помочь.