2015-05-08 3 views
19

Окружающая среда:

  • OS: Debian 8.0.0-amd64, убунту-15,04, 16,04
  • Docker: 1.xx

Процедура:

Я изменил /etc/default/docker, чтобы добавить приватный реестр докеров, затем я перезапустил службу докеров и, наконец, попытался выполнить p убрать некоторое изображение.флаги демона Docker игнорировали

$ cat /etc/default/docker 
DOCKER_OPTS="--insecure-registry mydocker-registry.net:5000" 

$ service docker restart 

$ docker pull mydocker-registry.net:5000/testdb 
FATA[0000] Error: v1 ping attempt failed with error: Get https://mydocker- 
registry.net:5000/v1/_ping: dial tcp: lookup mydocker-registry.net: no 
such host. If this private registry supports only HTTP or HTTPS with an 
unknown CA certificate, please add `--insecure-registry mydocker- 
registry.net:5000` to the daemon's arguments. In the case of HTTPS, if 
you have access to the registry's CA certificate, no need for the flag; 
simply place the CA certificate at /etc/docker/certs.d/mydocker- 
registry.net:5000/ca.crt 

ps выход не показывает ничего о DOCKER_OPTS окружающей вар.

$ ps auxwww|grep docker 
root 6919 0.0 0.1 331076 19984 ? Ssl 10:14 0:00 /usr/bin/docker -d -H fd:// 

Вопрос:

Согласно Docker документации способ использовать частный реестр через DOCKER_OPTS в /etc/default/docker. Почему, после этого, он не вступает в силу в этой среде?

Примечания:

  • Частный имя хоста реестра правильно разрешаются DNS.
+0

Ваш демон docker не может найти ваш частный реестр - действительно ли он существует и может быть найден в dns? 'dial tcp: lookup mydocker-registry.net: no такой host' – Michael

+0

Вы перезапустили докер после изменения'/etc/default/docker'? – larsks

+0

Можете ли вы попробовать добавить параметр '--dns' в' 'DOCKER_OPTS'? (как в http://stackoverflow.com/q/29607761/6309) – VonC

ответ

51

Рекомендуемый способ Docker 17.xx +

Есть несколько способов настроить флаги демона и переменные окружения для Докер демона. recommended way должен использовать независимый от платформы файл daemon.json, который по умолчанию находится по адресу /etc/docker/.

Таким образом, для настройки небезопасных реестров, выполните следующие действия:

  1. Установите следующий флаг в /etc/docker/daemon.json файле:

    { 
        "insecure-registries": ["mydocker-registry.net:5000"] 
    } 
    
  2. Restart Докер

    $ sudo systemctl restart docker 
    

Легче каждый раз!


Ранее Рекомендуемый способ с Докер 1,12

Согласно docker documentation, Рекомендуемый способ настроить флаги демона и переменные окружения для Докер демона является использование Systemdраскрывающихся в файле.

Таким образом, для этого конкретного случая, выполните следующие действия:

  1. Создайте файл с именем /etc/systemd/system/docker.service.d/private-registry.conf со следующим содержанием:

    Если не существует, создайте каталог /etc/systemd/system/docker.service.d

    [Service] 
    ExecStart= 
    ExecStart=/usr/bin/dockerd --insecure-registry mydocker-registry.net:5000 
    
  2. Грипп SH изменения:

    $ sudo systemctl daemon-reload 
    
  3. Restart Docker:

    $ sudo systemctl restart docker 
    

Вуаля!


Не рекомендуется способ

Редактировать файл /lib/systemd/system/docker.service

... 
[Service] 
ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS 
... 
EnvironmentFile=-/etc/default/docker 
... 

Затем выполнить

systemctl daemon-reload 
systemctl restart docker 

Убедитесь, что /etc/default/docker загружается

ps auxwww | grep docker 
root  4989 0.8 0.1 265540 16608 ?  Ssl 10:37 0:00 /usr/bin/docker -d -H fd:// --insecure-registry 

Всё.

+0

Спасибо, у меня тоже была эта проблема, и это исправило это! Знаете ли вы, что это будет исправлено в более поздних версиях докеров (им предполагается, что это проблема с упаковкой), может быть, кто-то должен представить отчет об ошибке. –

+0

Должно ли 'EnvironmentFile = -/etc/default/docker' быть' EnvironmentFile =/etc/default/docker'? – Leonti

+1

@ Leonti, предложенные изменения основаны на примерах здесь: https: //docs.docker.com/articles/systemd/ –

6

Systemd на основе системы не читают/и т.д./конфигурации по умолчанию, вы должны поставить те, в/и т.д./Systemd теперь смотри также докер ошибка docker bug #12926

Существует официальная документация на сайте Докер сейчас, обратитесь к Control and configure Docker with systemd.

Вы никогда не должны напрямую взламывать служебные файлы для конфигурации.

Протестировано и работает на системах на базе Arch и Debian - мне пришлось включить опцию игнорировать любые устаревшие директивы EnvironmentFile (см. Также ссылку на Docker, но я не заметил ее поначалу и думал, что она не нужна):

-EnvironmentFile=/etc/default/docker 
ExecStart= 
ExecStart=/usr/bin/docker daemon ... 
6

вещи, кажется, изменились в Ubuntu 16.04 с помощью докер 1.12.x.На основе обновленного documentation

Добавить DOCKER_OPTS="-g /mnt/somewhere/else/docker/ --storage-driver=overlay2" в /etc/default/docker

Редактировать файл /lib/systemd/system/docker.service

... 
[Service] 
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS 
... 
EnvironmentFile=-/etc/default/docker 
... 

Затем выполните:

sudo systemctl daemon-reload 
sudo systemctl restart docker 
+0

Вопрос в том, как достичь' DOCKER_OPT 'значения не игнорировались, а не о том, как изменить каталог базы данных Docker (где контейнер и изображения идут). Остальная часть сообщения точно совпадает с принятым ответом –

+0

Это помогло мне. В моей установке Ubuntu файл, который использовался, был /lib/systemd/system/docker.service, и поэтому у меня был симптом, что файл конфигурации докера, указанный в большинстве документации, не имел никакого эффекта. –

3

Systemd действительно не предназначен для добавления варианты ExecStart или Окружающая среда. Лучший, а также самый независимый от платформы способ - использовать /etc/docker/daemon.jsonconfiguration file.

смотри:

cat > /etc/docker/daemon.json <<DOCKERCONFIG 
{ 
    "labels": ["foo=bar"], 
    "insecure-registries": ["mydocker-registry.net:5000"] 
} 
DOCKERCONFIG 
1

Ubuntu конкретное решение для незащищенной-реестра с помощью DOCKER_OPTS

Потому что ...

$ dpkg --list | grep -i docker 
ii docker.io       1.12.3-0ubuntu4~16.04.2   amd64  Linux container runtime 

... поставляется с ...

$ cat /etc/systemd/system/multi-user.target.wants/docker.service 
[Unit] 
Description=Docker Application Container Engine 
Documentation=https://docs.docker.com 
After=network.target docker.socket 
Requires=docker.socket 

[Service] 
Type=notify 
# the default is not to use systemd for cgroups because the delegate issues still 
# exists and systemd currently does not support the cgroup feature set required 
# for containers run by docker 
EnvironmentFile=-/etc/default/docker 
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS 
ExecReload=/bin/kill -s HUP $MAINPID 
# Having non-zero Limit*s causes performance problems due to accounting overhead 
# in the kernel. We recommend using cgroups to do container-local accounting. 
LimitNOFILE=infinity 
LimitNPROC=infinity 
LimitCORE=infinity 
# Uncomment TasksMax if your systemd version supports it. 
# Only systemd 226 and above support this version. 
TasksMax=infinity 
TimeoutStartSec=0 
# set delegate yes so that systemd does not reset the cgroups of docker containers 
Delegate=yes 
# kill only the docker process, not all processes in the cgroup 
KillMode=process 

[Install] 
WantedBy=multi-user.target 

... (Specifi чески: ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS) вы можете сделать гибридный подход, сочетающий [chosen answer's] «Recommended Way» и использование DOCKER_OPTS, чтобы не дул над опцией -H fd:// если вы переопределить ExecStart

# The docker.io package doesn't create a systemd drop-ins directory, so we will 
$ mkdir -p /etc/systemd/system/docker.service.d 
$ cat > /etc/systemd/system/docker.service.d/10-insecure-registry.conf <<EOF 
[Service] 
Environment="DOCKER_OPTS=--insecure-registry docker.internal:5000" 
EOF 
+0

4. mar 2017, версия докер 17.03.0-ce: мне пришлось добавить '$ DOCKER_OPTS' в' ExecStart =/usr/bin/dockerd -H fd: // 'в'/etc/systemd/system/multi- user.target.wants/docker.service' вручную, чтобы заставить это работать. Теперь подтверждена работа. –

+0

@YngvarKristiansen интересно. Какая версия Ubuntu и как был установлен Docker? –

+0

Ubuntu 16.04.2 LTS, ядро ​​4.6.0-040600-generic. Ранее я установил Docker 1.12. Затем загрузите и установите с помощью инструкций здесь: https://store.docker.com/editions/community/docker-ce-server-ubuntu?tab=description –

0

У меня был подобный вызов. Когда я начал искать, чтобы начать перемещение некоторых систем от 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 не поддерживает комментарии.

Мне нужен системный дизайн для использования файла переопределения, который только изменяет флаги докеров. Он использует файл конфигурации Docker systemd по умолчанию (/lib/systemd/system/docker.service) для других настроек Docker. Другой целью было настроить systemd на каждую систему после каждого изменения или загрузки.

Это решает мою задачу. Это может вам помочь.

git clone https://github.com/BradleyA/docker-scripts 
cd docker-scripts/dockerd-configuration-options 
Смежные вопросы