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

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.

Это действительно смутило меня!

4b9b3361

Ответ 1

Согласно документации докера, рекомендуемый способ настройки флагов демона и переменных окружения для вашего демона Docker - использовать раскрывающийся файл systemd.

Итак, для этого конкретного случая сделайте следующее:

  1. Используйте команду sudo systemctl edit docker.service, чтобы открыть файл переопределения для docker.service в текстовом редакторе.

  2. Добавьте или измените следующие строки, подставив свои собственные значения.

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
    
  3. Сохраните файл.

  4. Перезагрузите конфигурацию systemctl.

     $ sudo systemctl daemon-reload
    
  5. Перезапустите Docker:

     $ sudo systemctl restart docker.service
    
  6. Проверьте, было ли выполнено изменение, просмотрев выходные данные 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 **