如何检测docker守护程序端口

dem*_*mas 42 docker

我已经安装了Ubuntu和Docker.我正在尝试启动Raik容器:

$ DOCKER_RIAK_AUTOMATIC_CLUSTERING=1 DOCKER_RAIK_CLUSTER_SIZE=5 DOCKER_RIAK_BACKEND=leveldb make start-cluster ./bin/start
Run Code Online (Sandbox Code Playgroud)

并收到错误消息:

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

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

如果我订

export DOCKER_HOST="tcp://127.0.0.1:2375"
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*nel 48

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

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

sudo docker -H 0.0.0.0:2375 -d &
Run Code Online (Sandbox Code Playgroud)

警告:这意味着可以通过该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

  • 实际上,您可以直接将它指向unix套接字:`export DOCKER_HOST ="unix:///var/run/docker.sock"` (7认同)
  • 嗨@ChrisMcKinnel码头-H 0.0.0.0:2375 -d给我看'docker --help'.我是码头1.10.他们改变了吗? (5认同)
  • 这在 17.12 对我有用 1)停止服务 - sudo systemctl stop docker 2)然后, sudo /usr/bin/dockerd -H 0.0.0.0:2375 (3认同)

chi*_*kar 37

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

请注意,如果没有目录docker.service.d或命名文件docker.conf,则应创建它.

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

  2. 检查你的Docker守护进程.重启docker服务后,可以在输出中看到systemctl status docker.service 类似的端口 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock.

希望这可能有所帮助

谢谢!

  • 你是救世主.它对我有用 (4认同)
  • 请注意,现在可以访问主机上此端口的所有内容都可以进行远程root访问。没有加密,没有凭据,并且会在Internet上对其进行主动扫描。 (3认同)

Her*_*arn 14

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

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

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

DOCKER_OPTS="-H tcp://127.0.0.1:5000 -H unix:///var/run/docker.sock"
Run Code Online (Sandbox Code Playgroud)

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

{
"debug": true,
"hosts": ["tcp://127.0.0.1:5000", "unix:///var/run/docker.sock"]
}
Run Code Online (Sandbox Code Playgroud)

如果没有配置docker默认套接字,Docker将等待无限期.ie

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
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

添加用户端口[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?
Run Code Online (Sandbox Code Playgroud)

此错误不是因为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 
Run Code Online (Sandbox Code Playgroud)

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


Ank*_*rni 6

由于我也遇到了“如何检测 docker daemon 端口”的相同问题,但是我在 OSX 上遇到过,经过一番深入研究后,我找到了答案。我想在这里为来自 osx 的人分享答案。

如果您访问docker for mac 和github 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
Run Code Online (Sandbox Code Playgroud)

进而

export DOCKER_HOST=tcp://localhost:2375
Run Code Online (Sandbox Code Playgroud)

但是对于 mac os 上的本地客户端,您不需要导出 DOCKER_HOST 变量来测试 api。