Назад | Перейти на главную страницу

передача параметра label в daemon.json в Docker

Я пытаюсь настроить демон докеров на Centos 7.

Цель состоит в том, чтобы передать параметры перезаписывающему скрипту в systemd и держи все в daemon.json это намного читаемее и чище

Скрипт по умолчанию /etc/systemd/system/docker.service.d/10-machine.conf является:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver overlay2 --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic --insecure-registry mtm-registry:5000
Environment=

/etc/systemd/system/docker.service.d/override.conf все еще есть --label provider=generic это последний параметр, который нужно ввести daemon.json:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --label provider=generic

В /etc/docker/daemon.json я уже установил эти параметры:

{
"storage-driver": "overlay2",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"],
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server.pem",
"tlskey": "/etc/docker/server-key.pem",
"insecure-registries": ["my-registry:5000"]
}

Я не эксперт в формате JSON, поэтому попутно застрял "labels":.

я пытался "labels": ["provider=generic"] это не работает, dockerd не начать

Есть какие-нибудь предложения, чтобы передать это правильно?

РЕШЕНИЕ:

Понятия не имею, почему, но после того, как я передал значение с пробелом перед provider = generic,

(как это: [" provider=generic"]), демон запускается правильно:

{
"storage-driver": "overlay2",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"],
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server.pem",
"tlskey": "/etc/docker/server-key.pem",
"insecure-registries": ["mtm-registry:5000"],
"labels": [" provider=generic"] 
}

Просто должно быть:

{
"storage-driver": "overlay2",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"],
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server.pem",
"tlskey": "/etc/docker/server-key.pem",
"insecure-registries": ["my-registry:5000"],
"labels": ["provider=generic"]
}

Возможно, вы пропустили запятую между клавишами (см. Строчку перед)?


Обратите внимание, что пробел перед этим полем не требуется. Похоже, где-то есть опечатка или конфликт. Возможно, это специфическое изменение вилки RedHat для демона, поскольку в Debian отлично работает следующее:

# # my daemon.json file does not have a leading space
# jq .labels </etc/docker/daemon.json
[
  "foo=bar",
  "provider=generic"
]

# # note you only need a reload here, I'm trying to reproduce the error
# systemctl restart docker

# docker system info --format '{{json .Labels}}' | jq .
[
  "foo=bar",
  "provider=generic"
]