我改变了/etc/default/docker
来添加一个私有的dockerregistry,然后我重新启动了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环境variables。
$ ps auxwww|grep docker root 6919 0.0 0.1 331076 19984 ? Ssl 10:14 0:00 /usr/bin/docker -d -H fd://
根据docker文档,使用私有registry的方法是通过/etc/default/docker
docker中的DOCKER_OPTS。 为什么这样做后,在这种环境下不起作用?
有很多方法可以为Docker守护进程配置守护进程标志和环境变量。 推荐的方法是使用独立于平台的daemon.json
文件,该文件位于Linux上的/etc/docker/
。
因此,要配置不安全的注册表,请执行以下操作:
在daemon.json
文件中设置以下标志:
{ "insecure-registries": ["mydocker-registry.net:5000"] }
重新启动Docker
$ sudo systemctl restart docker
每次更轻松!
根据docker文档 ,为Docker守护进程配置守护进程标志和环境变量的推荐方法是使用systemd 放入文件 。
所以,对于这个特定的情况,请执行以下操作:
使用以下内容创建一个名为/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
冲洗更改:
$ sudo systemctl daemon-reload
重启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
而已。
基于系统的系统不读取/ etc / default配置,你必须把它们放在/ etc / systemd中,另请参阅docker bug docker bug#12926
现在有一个关于Docker站点的官方文档,请参阅Control和Systemd配置Docker 。
你不应该直接破解服务文件进行配置。
经过测试,在基于Arch和Debian的系统上工作 – 但是我必须包括忽略任何废弃的EnvironmentFile指令的选项(另请参阅链接的Docker参考,但是我一开始并没有发现它,并认为它不是必需的):
-EnvironmentFile=/etc/default/docker ExecStart= ExecStart=/usr/bin/docker daemon ...
Ubuntu 16.04
使用1.12.x
似乎已经发生了变化。 基于更新的文档
在/etc/default/docker
DOCKER_OPTS="-g /mnt/somewhere/else/docker/ --storage-driver=overlay2"
添加DOCKER_OPTS="-g /mnt/somewhere/else/docker/ --storage-driver=overlay2"
编辑文件/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
因为…
$ 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_OPTS
)你可以做一个混合的方法结合[选择的答案] “ 推荐的方式 ”和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