• docker socket设置


    docker socket设置
    参考
    在 docker 的官方文档中, 介绍了三种访问 docker Remote API 的方式, 分别是 unix 套接字文件/ tcp 监听端口和 fd 文件描述符. 由于 docker 默认会为我们开启本地 socket 套接字(/var/run/docker.sock) 所以本篇文章主要介绍如何让 docker 监听 tcp端口

    在 docker 配置文件中设置
    docker 1.12 版本之后, 建议在 docker 的 js 配置文件中配置, 路径为 /etc/docker/daemon.js 默认没有这个文件, 可以手动创建此文件, docker 启动时默认会读取此配置文件

    > vim /etc/docker/daemon.js
    {
        "hosts": [
            "tcp://0.0.0.0:2375",
            "unix:///var/run/docker.sock"
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意上面??一定要写上本地的 socket 位置, 不然无法使用本地的 CLI 控制 docker

    unix:///var/run/docker.sock
    
    • 1

    修改完js配置文件后, 重启 docker 服务, 出现了如下报错

    [root@node1 ~]# systemctl status docker.service
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
       Active: failed (Result: start-limit) since Sun 2020-10-25 16:54:42 CST; 3s ago
         Docs: https://docs.docker.com
      Process: 4474 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
     Main PID: 4474 (code=exited, status=1/FAILURE)
    
    Oct 25 16:54:40 node1 systemd[1]: Failed to start Docker Application Container Engine.
    Oct 25 16:54:40 node1 systemd[1]: Unit docker.service entered failed state.
    Oct 25 16:54:40 node1 systemd[1]: docker.service failed.
    Oct 25 16:54:42 node1 systemd[1]: docker.service holdoff time over, scheduling restart.
    Oct 25 16:54:42 node1 systemd[1]: Stopped Docker Application Container Engine.
    Oct 25 16:54:42 node1 systemd[1]: start request repeated too quickly for docker.service
    Oct 25 16:54:42 node1 systemd[1]: Failed to start Docker Application Container Engine.
    Oct 25 16:54:42 node1 systemd[1]: Unit docker.service entered failed state.
    Oct 25 16:54:42 node1 systemd[1]: docker.service failed.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    从上面??的报错信息中可以判断出, 是因为 docker 的 socket 配置出现了冲突, 接下来查看 docker 的启动入口文件

    > vim /lib/systemd/system/docker.service # Ubuntu的路径; CentOS 的路径为: /usr/lib/systemd/system/docker.service
    # ...省略
    # 关键行
    ExecStart=/usr/bin/dockerd -H fd://
    # ...省略
    
    • 1
    • 2
    • 3
    • 4
    • 5

    从上面可以看出, 在 docker 的启动入口文件中配置了 host 相关的信息, 而在 docker 的配置文件中也配置了 host 的信息, 所以发生了冲突. 解决办法, 建议将 docker 启动入口文件中的 -H fd:// 删除, 再重启 docker 服务即可

    # ExecStart=/usr/bin/dockerd -H fd://
    ExecStart=/usr/bin/dockerd
    
    • 1
    • 2

    在 docker 启动入口中设置
    当然你也可以在启动入口配置监听的端口和本地 socket 信息

    > vim /lib/systemd/system/docker.service # Ubuntu的路径; CentOS 的路径为: /usr/lib/systemd/system/docker.service
    > # ExecStart=/usr/bin/dockerd -H fd://
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    # ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375
    
    • 1
    • 2
    • 3
    • 4

    最下面两条配置是等价的, docker 默认的本地 socket 文件就在 /var/run/docker.sock 这个位置, 如果没有特殊需求, 不需要显示的进行配置

  • 相关阅读:
    工业控制系统产业联盟理事长辛耀中一行莅临麒麟信安考察交流
    定制自己的 Excel 界面 + 保存 Excel
    RabbitMQ之TTL机制
    学生信息系统(python实现)
    【chromium】windows 获取源码到本地
    Java多线程
    极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队
    Java.lang.Class类 getName()方法有什么功能呢?
    OpenCV实现图像去水印功能(inpaint)
    mmap在嵌入式中的应用
  • 原文地址:https://blog.csdn.net/qq_46416934/article/details/126327167