Docker守护程序标志被忽略

Cam*_*lva 21 ubuntu debian docker

环境:

  • 操作系统:debian 8.0.0-amd64,ubuntu-15.04,16.04
  • Docker:1.xx

程序:

我改为/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
Run Code Online (Sandbox Code Playgroud)

一个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://
Run Code Online (Sandbox Code Playgroud)

题:

根据docker文档,使用私有注册表的方法是通过DOCKER_OPTS /etc/default/docker.为什么在这样做之后,它在这种环境中不起作用?

笔记:

  • DNS正确解析了私有注册表主机名.

Cam*_*lva 56

推荐方式Docker 17.xx +

有许多方法可以为Docker守护程序配置守护程序标志和环境变量.该建议的方法是使用独立于平台的daemon.json文件,该文件位于/etc/docker/默认情况下,在Linux上.

因此,要配置不安全的注册表,请执行以下操作:

  1. /etc/docker/daemon.json文件中设置以下标志:

    {
        "insecure-registries": ["mydocker-registry.net:5000"]
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重启Docker

     $ sudo systemctl restart docker
    
    Run Code Online (Sandbox Code Playgroud)

每次都更容易!


以前推荐的Docker 1.12方式

根据docker文档,为Docker守护程序配置守护程序标志和环境变量的推荐方法是使用systemd drop-in文件.

因此,对于这种特定情况,请执行以下操作:

  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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 同花顺变化:

    $ sudo systemctl daemon-reload
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重启Docker:

     $ sudo systemctl restart docker
    
    Run Code Online (Sandbox Code Playgroud)

瞧!


不推荐的方式

编辑文件 /lib/systemd/system/docker.service

...
[Service]
ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS
...
EnvironmentFile=-/etc/default/docker
...
Run Code Online (Sandbox Code Playgroud)

然后执行

systemctl daemon-reload
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

验证是否/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 
Run Code Online (Sandbox Code Playgroud)

而已.


psy*_*ok7 8

Ubuntu 16.04使用docker 似乎发生了变化1.12.x.基于更新的文档

添加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
...
Run Code Online (Sandbox Code Playgroud)

然后执行:

sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)


Gre*_*gor 6

基于系统的系统不读/ etc/default配置,你现在必须把它们放在/ etc/systemd中,另见docker bug docker bug#12926

现在有关于Docker站点的官方文档,请参阅控制并使用systemd配置Docker.

您永远不应该直接破解服务文件以进行配置.

测试并使用基于Arch和Debian的系统 - 我必须包含忽略任何过时的EnvironmentFile指令的选项(参见链接的Docker引用,但我最初没有发现它并且认为不需要):

-EnvironmentFile=/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon ...
Run Code Online (Sandbox Code Playgroud)