【问题标题】:Correct way to start docker daemon listening to specific port启动 docker daemon 监听特定端口的正确方法
【发布时间】:2015-10-21 13:43:29
【问题描述】:

我是 docker 新手,想以守护进程模式启动它,监听特定的 IP 地址和端口。在documentation 中说这可以通过写sudo /usr/bin/docker daemon -H 0.0.0.0:5555 来完成。然后它说我可以使用此命令docker ps 列出正在运行的容器。如果我尝试这样做,我会收到以下消息:

获取http:///var/run/docker.sock/v1.20/containers/json?all=1:拨打unix /var/run/docker.sock:没有这样的文件或目录。

  • 您是否尝试在没有 TLS 的情况下连接到启用 TLS 的守护程序?
  • 您的 docker 守护程序是否已启动并正在运行?

我无法与之互动。我一直在寻找解决方案,但没有运气。有什么建议吗?

附:我怎样才能在后台运行这个守护进程?我尝试附加一个 & 但我一直卡在输出上,直到按下 ctrl+c。

提前致谢

【问题讨论】:

  • "nohup" 是您要搜索的内容。看看这里stackoverflow.com/questions/10408816/…
  • 行为取决于您的操作系统。您使用的是什么操作系统?
  • 对不起,我忘了说我使用的是 Ubuntu 14.04

标签: ubuntu docker port bind daemon


【解决方案1】:

在带有 docker-ce (17.03.1~ce-0~ubuntu-xenial) 的 Ubuntu (16.04 LTS) 上,执行以下操作以使 docker 侦听 TCP 端口而不是套接字。

添加文件/etc/systemd/system/docker.service.d/override.conf,内容如下:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

添加文件/etc/docker/daemon.json,内容如下

{
    "hosts": [
        "tcp://127.0.0.1:2375"
    ] 
}

重新加载 (systemctl daemon-reload) 并重新启动 (systemctl restart docker.service) docker。

供参考:https://github.com/moby/moby/issues/25471

编辑:

小心,恶魔只会监听该网络端口而忽略本地请求。 要让 docker 同时监听远程和本地,请编辑 daemon.json 但保留标准的 unix 套接字

{
        "hosts" : [
                "unix:///var/run/docker.sock",
                "tcp://<docker-host-ip-or-localhost>:2375"
        ]
}

Docker 守护进程连接选项docs

【讨论】:

    【解决方案2】:

    Mac OSX 上,您可以运行 Docker Quickstart Terminal App 来查看:

    Machine default already exists in VirtualBox.
    Starting machine default...
    Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
    Setting environment variables for machine default...
    

    ...

                            ##         .
                      ## ## ##        ==
                   ## ## ## ## ##    ===
               /"""""""""""""""""\___/ ===
          ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
               \______ o           __/
                 \    \         __/
                  \____\_______/
    
    
    docker is configured to use the default machine with IP 192.168.99.100
    For help getting started, check out the docs at https://docs.docker.com
    

    现在

    docker ps
    

    应该有效

    Linux 上,例如Ubuntu 前置 sudo 可能是必要的。 例如。

    docker ps
    

    将导致:

    Get http:///var/run/docker.sock/v1.20/containers/json: dial unix /var/run/docker.sock: permission denied.
    * Are you trying to connect to a TLS-enabled daemon without TLS?
    * Is your docker daemon up and running?
    

    但是

    sudo docker ps
    

    会起作用。

    https://docs.docker.com/articles/basics/

    要检查您的 docker 服务是否正在运行,您可以调用

     sudo service --status-all 2>&1 | grep docker
    

    它应该显示:

    [ - ]  docker
    

    有时您的 docker 安装可能已损坏 见:Docker daemon does not start or restart

    【讨论】:

    • 我添加了 sudo 但这没有帮助。我收到以下消息:Cannot connect to the Docker daemon. Is 'docker -d' running on this host? 但是,您对sudo service --status-all 2&gt;&amp;1 | grep docker 的建议给了我预期的输出。这是我安装 docker 的方法(我通过脚本来安装):sudo touch /etc/apt/sources.list.d/docker.listsudo -u root bash -c "echo 'deb https://apt.dockerproject.org/repo ubuntu-trusty main' &gt;&gt; /etc/apt/sources.list.d/docker.list"
    • sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D sudo apt-get update sudo apt-get -y install docker-engine sudo service docker stop sudo /usr/bin/docker daemon -H 0.0.0.0:5555&amp; PS:如何在 cmets 中进行换行?
    【解决方案3】:

    我找到了解决问题的方法。我指定 docker 在 IP x 和端口 y 上运行,但 docker 然后只监听那个套接字。为了监听本地请求,我必须在 unix 套接字中添加另一个 -H 标志:

    sudo /usr/bin/docker daemon -H tcp://0.0.0.0:5555 -H unix:///var/run/docker.sock
    

    【讨论】:

      【解决方案4】:

      这个线程非常有用,所以我想贡献一下如何让它在 Ubuntu 14.04.1 LTS 和 docker 1.12.6-cs13 上工作(可能同样适用于 docker-ce 版本)。 systemd 方法(也称为 /etc/sysconfig/docker)对于这个 Ubuntu 年份是不可能的,截至本文撰写时的官方 docker 文档没有安装后指南,用于使用 upstart 为 Ubuntu 14.04.1 LTS 让 docker 守护进程在网络上侦听。我发现下面的方法效果很好:

      创建/etc/default/docker 包含内容的文件 DOCKER_OPTS = "-H tcp://MACHINE-IP:2375 -H unix:///var/run/docker.sock"

      重启docker服务sudo service docker restart。完成此操作后,docker daemon 开始在网络上侦听,并且守护程序日志看起来很干净。如果有更好的方法,也许更有经验的 docker 用户可以加入。

      【讨论】:

        【解决方案5】:

        出于某种原因,Phoenix 的解决方案给了我错误。所以我找到了另一种方法-

        我编辑了 /etc/sysconfig/docker 并更改了 OPTIONS 参数

        OPTIONS='--selinux-enabled -H=unix:///var/run/docker.sock -H=0.0.0.0:2375'
        

        然后我重新启动了 docker 守护进程

        systemctl restart docker
        

        它成功了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-18
          • 1970-01-01
          • 1970-01-01
          • 2016-05-27
          相关资源
          最近更新 更多