在centos中设置Docker_选项

在centos中设置Docker_选项,centos,docker,Centos,Docker,我需要让docker听我说tcp://0.0.0.0/4243 在我运行amazon linux(centos)的主机上。我看到的所有文档都告诉我运行以下命令 echo DOCKER_OPTS="-H=tcp://127.0.0.1:4243" >> /etc/default/docker 将正确的docker\u选项写入/etc/default/docker。我已经这样做了,但当我重新启动docker时,它不会听127.0.0.1 我可以通过键入使docker正确运行 sudo

我需要让docker听我说tcp://0.0.0.0/4243 在我运行amazon linux(centos)的主机上。我看到的所有文档都告诉我运行以下命令

echo DOCKER_OPTS="-H=tcp://127.0.0.1:4243" >> /etc/default/docker
将正确的docker\u选项写入/etc/default/docker。我已经这样做了,但当我重新启动docker时,它不会听127.0.0.1

我可以通过键入使docker正确运行

sudo /usr/bin/docker -H tcp://0.0.0.0:4243 -d &
这是可行的,但我希望默认选项处于监听状态tcp://0.0.0.0:4243 不必每次都指定它

docker似乎完全忽略了我的/etc/default/docker文件,因此设置被忽略。我还尝试将该文件写入/etc/default/docker.io和/etc/default/docker io(其实没想到会发生太多事情)

我需要一个能让docker从

service docker start
否则将在我当前的部署手册中引起问题

关于如何设置DOCKER_选项,而不是每次重新启动DOCKER时都必须这样做,您有什么想法吗?

CentOS 7(RHEL 7):

查找systemd docker.service单位文件。矿山位于:
/usr/lib/systemd/system/docker.service

在此文件中,编辑[Service]部分中以
ExecStart=
开头的行。添加“
-H”tcp://0.0.0.0:4243
”插入行中。(注意,-H和IP地址之间没有“=”,如上面的示例DOCKER_OPTS行所示。)

在我的系统上,
docker.service
的全部内容如下所示:

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/docker -d -H tcp://127.0.0.1:4243 -H fd:// $OPTIONS
LimitNOFILE=1048576
LimitNPROC=1048576

[Install]
Also=docker.socket
(我只需要Docker监听环回,而不是所有IP地址。)

对systemd unit文件进行此编辑并通过
systemctl restart Docker
重新启动Docker服务后,我看到以下过程:

root 8574 0.0 0.2 321708 10564?Ssl 00:42 0:00/usr/bin/docker-d-Htcp://127.0.0.1:4243 -H fd://--selinux已启用


如您所见,它现在确实侦听配置的TCP地址,并将在重新启动和服务停止/启动期间保持不变。

在RHEL7中,您也可以编辑/etc/sysconfig/docker文件,而不是修改docker.service unit文件:

# /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs
OPTIONS=--selinux-enabled -H unix:///var/run/docker.sock -H tcp://0.0.0.0:4243
然后重新启动docker服务


对我来说,这比修改服务脚本更可靠。

我认为在CentOS上,您可以尝试在文件/etc/sysconfig/docker中设置以下选项

other_args="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"
然后重新启动docker并尝试检查端口是否正在使用打开

netstat -plt | grep 4243 

如果在CentOS 7上使用Docker 1.7.1进行监听,且未修改
/usr/lib/systemd/system/Docker.service
/etc/sysconfig/Docker
对我有效,则应列出此项。似乎在systemd中设置了套接字,因此为了更改组,您必须在
/usr/lib/systemd/system/docker.socket中编辑SocketGroup

[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=jenkins

[Install]
WantedBy=sockets.target

当我在上面的帖子中用替换文件显示它时,它对我起了作用:
/etc/systemd/system/docker.service.d

我正在使用centos 7

我只想在docker配置文件中添加不安全的注册表,然后在/etc/sysconfig/docker中更改了“docker_OPTS=--unsecure registry=..”,但它不起作用

当我在配置中看到一个不安全的_注册表时,我改变了这个变量,它工作了

所以我猜DOCKER_OPTS在这里不起作用

但它对我的unbuntu 14起了作用

使用docker时真的很令人沮丧

基于

sudo mkdir/etc/systemd/system/docker.service.d

sudo vi/etc/systemd/system/docker.service.d/docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -D -H tcp://127.0.0.1:4243
sudo systemctl后台程序重新加载


sudo systemctl restart docker

我需要将默认桥接接口docker0更改为使用我自己的桥接接口br0,并在该文件中添加以下内容解决了我的问题:

CentOS 7.2和docker 1.10.3

/usr/lib/systemd/system/docker.service.d/docker.conf

[Service] 
ExecStart=
ExecStart=/usr/bin/docker daemon --bridge=br0 -H fd://
当然,之后需要执行以下操作:

sudo systemctl daemon-reload

sudo systemctl restart docker 

ip link del docker0

我不敢相信有多少答案。下面是另一个:

  • CentOS 7.3
  • Docker版本=17.03.1-ce,API版本=1.27
这个答案是建立在一个令人难以置信的游戏组合,这个和这个

  • sudovim/usr/lib/systemd/system/docker.service
  • 插入“-H”tcp://0.0.0.0:4243 -Hunix:///var/run/docker.sock"
  • sudo systemctl守护进程重载//刷新上面的文件更改
  • sudo systemctl重新启动docker
  • netstat-l | grep 4243//验证端口是否打开
  • 从某处连接到docker主机,如Jenkins docker插件,即tcp://[server_ip]:4243

  • 1、 编辑/usr/lib/systemd/system/docker.service,在服务部分添加两个参数:

    # vim /usr/lib/systemd/system/docker.service
    
    [服务]

    执行开始=

    ExecStart=/usr/bin/dockerd-Htcp://0.0.0.0:2375 -Hunix://var/run/docker.sock

    2、 重新加载配置,然后重新启动docker

    # systemctl daemon-reload
    # systemctl restart docker
    
    3、 要检查是否成功,请查看是否返回以下响应

    # ps -ef|grep docker
    
    根262081023:51?00:00:00/usr/bin/dockerd-Htcp://0.0.0.0:2375 -Hunix://var/run/docker.sock


    来自编辑的引用似乎是一种新的、受支持的方式。

    我相信现在情况已经改变了,Brian Ogden的回答在早些时候对我有用,但在今天的环境中不起作用,可能是docker、内核和操作系统的更新版本

    CentOS 7.4.1708 (on AWS)
    Docker 17.03.2-ce
    API 1.27
    
    这是经过几次试射后奏效的方法。我在任何地方都找不到它

    在文件
    /etc/systemd/system/docker.service.d/execstart.conf
    中,将最后一个
    execstart
    (有两个)替换为以下内容

    ExecStart=/usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
    
    现在,我的文件看起来像这样

    # cat /etc/systemd/system/docker.service.d/execstart.conf
    [Service]
    Restart=always
    StartLimitInterval=0
    RestartSec=15
    ExecStartPre=-/sbin/ip link del docker0
    ExecStart=
    ExecStart=/usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
    #
    
    一旦更改上述文件,只需运行以下命令即可激活更改

    # systemctl daemon-reload && systemctl stop docker && rm -f /var/run/docker.sock && systemctl start docker
    
    要验证是否一切正常,可以运行以下任何(或全部)命令

    # systemctl status docker.service | grep tcp
               ├─21812 /usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
    #
    # netstat -an | grep 4243
    tcp6       0      0 :::4243                 :::*                    LISTEN
    #
    # ps aux | grep [4]243
    root     21812  1.0  0.8 1017512 67876 ?       Ssl  15:11   0:06 /usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
    #
    # docker -H :4243 info
    

    你是如何检查docker守护进程没有监听4243的?我正在使用jenkins连接到我的docker