正确启动docker守护进程监听特定端口的方法

时间:2015-10-21 13:43:29

标签: ubuntu docker port bind daemon

我是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守护程序是否正常运行?
  •   

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

P.S。如何在后台运行此守护程序?我试着追加一个&但我一直停留在输出上,直到按下ctrl + c。

提前致谢

5 个答案:

答案 0 :(得分:7)

在带有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)泊坞广告。

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

修改

小心,所以恶魔只会听取忽略本地请求的网络端口。 要使docker同时监听远程和本地,请编辑daemon.json但保留标准的unix socket

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

Docker守护程序连接选项docs

答案 1 :(得分:4)

Mac OSX 上,您运行Docker Quickstart终端应用程序以查看:

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 prepending 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/

要检查您的泊坞窗服务是否正在运行,您可以致电

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

它应该显示:

[ - ]  docker

有时您的码头工作人员可能已损坏 见:Docker daemon does not start or restart

答案 2 :(得分:4)

我找到了解决问题的方法。我指定在IP x和端口y上运行的docker,但docker只监听该套接字。我不得不在unix套接字上添加另一个-H标志,以便收听本地请求:

    <div ng-controller="myCtrl">
        <select
            ng-model="myOption"
            ng-options="value.id as value.label group by value.group for value in myOptions" ng-change="selectedValue()">
                <option>--</option>
        </select>
        <div>
            ng-model value: {{myOptionnew}}
        </div>
    </div>

var app = angular.module('myExample', []);

function myCtrl($scope) {
    $scope.myOptions = [{
            "id": 106,
            "group": "Group 1",
            "label": "Item 1"
        },{
            "id": 107,
            "group": "Group 1",
            "label": "Item 2"
        },{
            "id": 110,
            "group": "Group 2",
            "label": "Item 3"
        }];

    $scope.selectedValue = function()
    {
        alog($scope.myOption);   
        $scope.myOptionnew = $scope.myOption;
    }
};

答案 3 :(得分:1)

这个主题非常有用,所以我想通过docker 14.04.1 LTS可能与docker-ce一起工作)为Ubuntu 1.12.6-cs13提供帮助。版本也一样)。对于这个Ubuntu版本,systemd方法(也/etc/sysconfig/docker)是不可能的,截至本文撰写时,官方docker文档没有使用upstart在网络上监听docker守护程序的安装后指南对于Ubuntu 14.04.1 LTS。我发现下面的方法效果很好:

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

重新启动docker service sudo service docker restart。执行此操作后,docker守护程序开始在网络上侦听,守护程序日志看起来很干净。如果有更好的方法,也许更有经验的码头用户可以加入。

答案 4 :(得分:0)

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

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

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

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

systemctl restart docker

并且有效。