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已正确解析专用注册表主机名
推荐方式Docker 17.xx+ 有许多方法可以为Docker守护程序配置守护程序标志和环境变量。这是使用独立于平台的
daemon.json
文件,默认情况下,该文件位于Linux上的
/etc/docker/

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

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

    {
        "insecure-registries": ["mydocker-registry.net:5000"]
    }
    
  • 重新启动Docker

     $ 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
    
  • 重新启动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 
    

    就这样

    基于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