如何检测docker守护程序端口

时间:2014-10-25 11:41:56

标签: docker

我已经安装了Ubuntu和Docker。我正在尝试推出Raik容器:

$ DOCKER_RIAK_AUTOMATIC_CLUSTERING=1 DOCKER_RAIK_CLUSTER_SIZE=5 DOCKER_RIAK_BACKEND=leveldb make start-cluster ./bin/start

并收到错误消息:

  

看起来环境变量DOCKER_HOST尚未设置。   除非已设置,否则无法启动Riak群集   适当。例如:

     

导出DOCKER_HOST =" tcp://127.0.0.1:2375"

如果我设置

export DOCKER_HOST="tcp://127.0.0.1:2375"

我所有其他容器都停止工作并说,找不到Docker守护进程。

看起来我的Docker Damon使用的不是2375端口。我怎么检查呢?

6 个答案:

答案 0 :(得分:45)

默认情况下,docker守护程序将使用unix socket unix:///var/run/docker.sock(您可以通过执行sudo netstat -tunlp检查是否存在这种情况,并注意没有docker守护程序进程侦听任何端口)。出于安全原因,建议保留此设置,但听起来Riak要求守护程序在TCP套接字上运行。

要使用任何人都可以连接的TCP套接字启动docker守护程序,请使用-H选项:

sudo docker -H 0.0.0.0:2375 -d &

警告:这意味着可以通过该TCP套接字与守护进程通信的计算机可以获得对主机的root访问权。

相关文档:

http://basho.com/posts/technical/running-riak-in-docker/

https://docs.docker.com/install/linux/linux-postinstall/#configure-where-the-docker-daemon-listens-for-connections

答案 1 :(得分:33)

  1. 准备额外的配置文件。创建名为/etc/systemd/system/docker.service.d/docker.conf的文件。在文件docker.conf内,粘贴以下内容:
  2. [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    
      

    请注意,如果没有像docker.service.d这样的目录或名为docker.conf的文件,那么您应该创建它。

    1. 重启Docker。保存此文件后,按systemctl daemon-reload重新加载配置,然后按systemctl restart docker.service重新启动Docker。

    2. 检查您的Docker守护程序。重新启动docker服务后,您可以在systemctl status docker.service的输出中看到该端口 比如/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

    3. 希望这可能会有所帮助

      谢谢!

答案 2 :(得分:14)

docker的参考文档:https://docs.docker.com/install/linux/linux-postinstall/#configure-where-the-docker-daemon-listens-for-connections

配置docker守护程序端口有 2种方法

1)在 / etc / default / docker 文件中配置:

DOCKER_OPTS="-H tcp://127.0.0.1:5000 -H unix:///var/run/docker.sock"

2)在 /etc/docker/daemon.json 配置:

{
"debug": true,
"hosts": ["tcp://127.0.0.1:5000", "unix:///var/run/docker.sock"]
}

如果未配置docker默认套接字,Docker将等待无限期.i.e

Waiting for /var/run/docker.sock
Waiting for /var/run/docker.sock
Waiting for /var/run/docker.sock
Waiting for /var/run/docker.sock
Waiting for /var/run/docker.sock

注意:但不要配置文件,可能会出现以下错误:

Waiting for /var/run/docker.sock
unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [tcp://127.0.0.1:5000 unix:///var/run/docker.sock], from file: tcp://127.0.0.1:5000)

添加用户端口[tcp://127.0.0.1:5000] 默认docker socket [unix:///var/run/docker.sock]的原因是用户端口允许访问docker API,而默认套接字启用CLI。如果/ etc / default / docker文件中未提及默认端口[unix:///var/run/docker.sock],则可能发生以下错误:

# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

此错误不是因为docker未运行,而是因为默认的docker socket未启用。

启用配置后,重新启动docker服务并验证是否启用了docker端口:

# netstat -tunlp | grep -i 5000
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      31661/dockerd 

适用于Docker版本17.04,可能因docker的不同版本而异。

答案 3 :(得分:3)

由于我也遇到了“如何检测docker守护程序端口”相同的问题,但是我在OSX上遇到了问题,经过一番挖掘,我找到了答案。我想在这里为osx的人分享答案。

如果您从docker访问Mac的known-issuesgithub issue,您会发现默认情况下docker守护进程仅在unix套接字/var/run/docker.sock上侦听,而在tcp上侦听。 Docker的默认端口是2375(未加密)和2376(加密)通过tcp的通信(尽管您可以选择任何其他端口)。

在OSX上,不能直接在tcp端口上运行守护程序。为此,一种方法是使用socat容器将unix域套接字上公开的Docker API重定向到OSX上的主机端口。

docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 bobrik/socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock

然后

export DOCKER_HOST=tcp://localhost:2375

但是,对于Mac OS上的本地客户端,您无需导出DOCKER_HOST变量即可测试api。

答案 4 :(得分:1)

尝试添加 firewalls: main: ... remember_me: secret: "%secret%" lifetime: 2592000 path: / domain: ~ user_provider: fos_userbundle -H tcp://0.0.0.0:2375行末尾)而不是Execstart

答案 5 :(得分:0)

如果您运行 ps -aux | grep dockerd,您应该会看到它正在运行的端点。