Docker守护程序标志被忽略 环境: OS:debian 8.0.0-amd64、ubuntu-15.04、16.04 码头工人:1.x.x 程序:
我更改了Docker守护程序标志被忽略 环境: OS:debian 8.0.0-amd64、ubuntu-15.04、16.04 码头工人:1.x.x 程序:,ubuntu,docker,debian,Ubuntu,Docker,Debian,我更改了/etc/default/docker以添加一个私有的docker注册表,然后重新启动了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
/etc/default/docker
以添加一个私有的docker注册表,然后重新启动了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\u 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文档,使用私有注册表的方法是通过/etc/default/docker
中的docker选项。为什么这样做之后,它在这种环境中不起作用
笔记:
- DNS已正确解析专用注册表主机名
daemon.json
文件,默认情况下,该文件位于Linux上的/etc/docker/
中
因此,要配置不安全的注册表,请执行以下操作:
/etc/docker/daemon.json
文件中设置以下标志:
{
"insecure-registries": ["mydocker-registry.net:5000"]
}
$ sudo systemctl restart docker
先前推荐的Docker 1.12方式 根据,为Docker守护程序配置守护程序标志和环境变量的建议方法是使用systemd插入文件 因此,对于这种特定情况,请执行以下操作:
/etc/systemd/system/docker.service.d/private registry.conf的文件,该文件包含以下内容:
如果不存在,则创建目录/etc/systemd/system/docker.service.d
$ sudo systemctl daemon-reload
$ 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
就这样 基于Systemd的系统不读取/etc/default配置,您现在必须将这些配置放入/etc/Systemd,另请参见docker bug Docker网站上现在有官方文档,请参阅 您不应该直接破解服务文件进行配置 在基于Arch和Debian的系统上测试和工作-我必须包括忽略任何过时环境文件指令的选项,尽管如此(另请参见链接Docker参考,但我一开始没有发现它,并且认为它不是必需的):
在使用docker
1.12.x
的Ubuntu 16.04中,情况似乎发生了变化。根据更新的
将DOCKER\u OPTS=“-g/mnt/某处/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
Systemd实际上不是为向ExecStart或Environment添加选项而设计的。最好的也是最独立于平台的方法是使用
/etc/docker/daemon.json
瞧:
cat > /etc/docker/daemon.json <<DOCKERCONFIG
{
"labels": ["foo=bar"],
"insecure-registries": ["mydocker-registry.net:5000"]
}
DOCKERCONFIG
cat>/etc/docker/daemon.json通过docker\u选项针对不安全注册表的Ubuntu特定解决方案
因为
$ 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
…(特别是:ExecStart=/usr/bin/dockerd-H fd://$DOCKER\u OPTS
)如果要重新定义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
#docker.io包没有创建系统的drop-ins目录,因此我们将
$mkdir-p/etc/systemd/system/docker.service.d
$cat>/etc/systemd/system/docker.service.d/10-unsecure-registry.conf我遇到了类似的挑战。当我开始考虑将一些系统从Ubuntu 14.04迁移到Ubuntu 16.04时。我的目标是为ubuntu16.04(systemd)和ubuntu14.04(Upstart)使用一个带有dockerd标志(DOCKER_OPTS)的dockerd配置文件,而不是/etc/DOCKER/daemon.json。我选择不对docker守护程序配置使用/etc/docker/daemon.json,因为json不支持注释
我希望systemd设计使用覆盖文件,该文件只修改dockerd标志。它将默认Docker systemd配置文件(/lib/systemd/system/Docker.service)用于其他Docker设置。另一个目标是在每次更改或引导后在每个系统上定制systemd
它解决了我的挑战。这可能对你有帮助
您的docker守护程序无法找到您的私有注册表-它实际上存在并且可以在dns中找到吗拨号tcp:lookup mydocker-registry.net:没有这样的主机
在更改/etc/default/docker
后是否重新启动了docker?是否可以尝试将--dns
选项添加到docker\u选项
?(如中所示)谢谢,我也有这个问题,这个问题解决了!你知道在docker的更高版本中(我假设这是一个打包问题)这个问题是否会得到解决吗?也许有人应该提交一份bug报告。不应该EnvironmentFile=-/etc/default/docker
是EnvironmentFile=/etc/default/docker
?@Leonti,建议的更改基于此处的示例:确保您的环境文件(/etc/default/docker
此处)文件仅包含键=值对(无注释)。问题是如何实现docker\u OPT
值未被忽略,而不是如何更改docker的存储基本目录(容器和图像所在的位置). 这篇文章的其余部分与被接受的答案完全相同,这对我很有帮助。在我的Ubuntu安装中,使用的文件是/lib/systemd/system/docker.service,因此我的症状是大多数文档中指定的docker配置文件无效。2017年3月,docker版本17.03.0-ce:我必须在/etc/systemd/system/multi-user.target.wants/docker.service
中手动添加$docker\u OPTS
到ExecStart=/usr/bin/dockerd-H fd://
,才能使其正常工作。确认现在工作怎么样
$ 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
# 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
git clone https://github.com/BradleyA/docker-scripts
cd docker-scripts/dockerd-configuration-options