DOCKER_OPTS не работают в файле конфигурации/etc/default/docker
Я изменил /etc/default/docker
на DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"
(docker version 1.4.1 в ubuntu 14.04), но для меня это не имеет никакого эффекта (не прослушивание в порту 2375
). Кажется, что докер не читает этот начальный файл конфигурации, потому что я обнаружил, что среда export http_proxy
тоже не работает.
Работает только sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d
.
Это действительно смутило меня!
Ответы
Ответ 1
Согласно документации докера, рекомендуемый способ настройки флагов демона и переменных окружения для вашего демона Docker - использовать раскрывающийся файл systemd.
Итак, для этого конкретного случая сделайте следующее:
Используйте команду sudo systemctl edit docker.service
, чтобы открыть файл переопределения для docker.service
в текстовом редакторе.
Добавьте или измените следующие строки, подставив свои собственные значения.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
Сохраните файл.
Перезагрузите конфигурацию systemctl
.
$ sudo systemctl daemon-reload
Перезапустите Docker:
$ sudo systemctl restart docker.service
Проверьте, было ли выполнено изменение, просмотрев выходные данные netstat
, чтобы убедиться, что dockerd
прослушивает настроенный порт.
$ sudo netstat -lntp | grep dockerd
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Ответ 2
См. здесь для более поздних версий Debian/Ubuntu, которые используют systemd.
В этой ссылке объясняется, как правильно изменить файл unitd для работы с DOCKER_OPTS: https://github.com/docker/docker/issues/9889
По существу вы создаете файл /etc/systemd/system/docker.service.d/docker.conf и указываете свои переопределения там.
Мне пришлось сделать что-то вроде следующего в вышеупомянутом файле, чтобы запустить докер с переменной окружения DOCKER_OPTS в среде systemd:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker -d $DOCKER_OPTS -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
Текущий процесс установки докеры, по-видимому, пренебрегает файлом systemd unit.
Ответ 3
У меня была такая же проблема.
Ubuntu 14.10 использует systemd
вместо sysv-init/upstart
. Возможно, вам нужно заглянуть в /lib/systemd/system/docker.service
, чтобы изменить параметры.
Ответ 4
Я просто столкнулся с "той же" проблемой.
Я заметил, что все параметры в файле /etc/default/docker фактически закомментированы по умолчанию.
Я удалил # перед DOCKER_OPTS, перезапустил и работал по назначению.
Я думаю, что предыдущие версии докеров (1.3) не учитывали эти параметры по умолчанию, по крайней мере, я не помню, чтобы удалить # -знак.
Ответ 5
После проверки исходного кода докера (config.go и flags.go) я бы сказал, что опции, которые вы можете передать в $DOCKER_OPTS
являются опциями для самого докера, а -H
или --Host
- опцией для демона докера. В качестве обходного пути для решения вашей проблемы вы можете отредактировать файл сценария инициализации, который вы используете, чтобы включить в -H
опцию -H
. Например:
- Если вы используете upstart init system, отредактируйте файл
/etc/init/docker.conf
изменив строку exec с помощью exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
- Если вы используете систему инициализации sysvinit, отредактируйте файл
/etc/init.d/docker
изменив начальные строки следующим образом:
Используйте эту команду:
start-stop-daemon --start --background \
--no-close \
--exec "$DOCKER" \
--pidfile "$DOCKER_SSD_PIDFILE" \
--make-pidfile \
-- \
-H "tcp://127.0.0.1:2375" \
-H "unix:///var/run/docker.sock" \
-d -p "$DOCKER_PIDFILE" \
$DOCKER_OPTS >> \
"$DOCKER_LOGFILE" 2>&1
log_end_msg $?
;;
Ответ 6
В ответ на комментарии systemd в сочетании с Ubuntu: Ubuntu 14.04 по-прежнему использует Upstart, поэтому изменения в /etc/default/docker
должны были иметь желаемый эффект. Только в 15.04 Ubuntu по умолчанию использует systemd.
Если у вас Ubuntu 15.04 или новее и, следовательно, вам нужно использовать systemd, или если вы явно решите использовать systemd до 15.04, правильным и самым простым способом получить желаемый эффект OP, TCP-сокета будет:
- Создайте файл
/etc/systemd/system/docker.service.d/docker-tcp.conf
- Добавить содержимое ниже
- Выполнить
sudo systemctl daemon-reload
- Выполнить
sudo systemctl restart docker
Содержимое файла:
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --host=tcp://127.0.0.1:2375
Ответ 7
Использование независимого от платформы daemon-configuration-file выглядит намного чище.
Добавьте "hosts"
в ваш /etc/docker/daemon.json
(или /custom/path/to/daemon/config.json
если вы используете опцию --config-file
при запуске dockerd
):
{
...
"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"],
...
}
перезапустите демон:
sudo systemctl restart docker
Ответ 8
У меня была похожая проблема. Когда я начал искать, чтобы начать перемещение некоторых систем из Ubuntu 14.04 в Ubuntu 16.04. Моей целью было использовать один файл конфигурации dockerd с флагами dockerd (DOCKER_OPTS) для Ubuntu 16.04 (systemd) и Ubuntu 14.04 (Upstart), кроме /etc/docker/daemon.json. Я решил не использовать /etc/docker/daemon.json для настройки демона docker, потому что json не поддерживает комментарии.
Я хотел, чтобы дизайн systemd использовал файл переопределения, который только изменяет флаги dockerd. Он использует стандартный конфигурационный файл Docker system/(/lib/systemd/system/docker.service) для других настроек Docker. Другой целью было настроить systemd в каждой системе после каждого изменения или загрузки.
Это решает мою проблему. Это может помочь вам.
https://github.com/BradleyA/docker-scripts/tree/master/dockerd-configuration-options
git clone https://github.com/BradleyA/docker-scripts
cd docker-scripts/dockerd-configuration-options
Ответ 9
Ну, у меня много проблем с вращением рабов по требованию от Дженкинса из-за ограничений порта демона докера.
так что я сделал
sudo systemctl edit docker.service
Добавлен раздел ниже
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --host=tcp://0.0.0.0:2375
Сохранить файл
запустите команду ниже
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service
** ПРИМЕЧАНИЕ. Это откроет ваш демон публично, и любой, у кого есть ваш ip и порт, может сделать что-нибудь с вашим демоном docker **