无法连接到位于 unix:///var/run/docker.sock 的 Docker 守护程序。 docker 守护进程是 运行 吗?在 Docker 文件中
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? inside a Dockerfile
我有以下 Dockerfile:
FROM ubuntu
ENV NPM_CONFIG_LOGLEVEL warn
ENV admin_user="PeerAdmin" network_name= version= hversion=hlfv1 fabrik_path=/fabric-tools project_dir=$(pwd)
ENV card_store_dir=$project_dir/.card-store stage_dir=$project_dir/.stage env_dir=$project_dir/env is_ok=1 FABRIC_VERSION=hlfv1
WORKDIR /app
COPY . /app
USER root
# RUN chown -R ubuntu:ubuntu .
WORKDIR /app
RUN apt-get update && \
mkdir "$fabrik_path" && \
cd "$fabrik_path" && \
export FABRIC_VERSION=hlfv1 && \
apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
apt-get -y install curl && \
apt-get -y install unzip && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
apt-get -y install docker.io && \
curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip && \
unzip fabric-dev-servers.zip && \
service docker start && \
./downloadFabric.sh && \
./startFabric.sh
正在尝试执行它,我收到错误消息:
**Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?**
service docker start
或 systemctl 之类的命令不起作用。
运行 Docker 与 sudo
。如果这不起作用,请按以下方式尝试 运行 守护程序:
sudo nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &
您不能 (*) 运行 Docker 在 Docker 容器或图像中。您不能 (*) 在 Docker 文件中启动后台服务。正如您所说,像 systemctl
和 service
这样的命令不会 (*) 在 Docker 的任何地方起作用。在任何情况下,您都不能从 Docker 文件中的任何位置使用任何主机系统资源,包括主机的 Docker 套接字。
您需要重新设计此 Docker 文件,使其只安装软件而不尝试启动它。理想情况下,一个容器将只启动一个服务器,并将 运行 它作为它的 CMD 在前台;否则,如果必须的话,您可能会依赖 supervisord 之类的东西来拥有多个服务器。如果您的应用程序严重依赖于能够在 Docker 中启动,您可能会发现在虚拟机中安装起来要容易得多。
(*) 从技术上讲,有很多方法可以完成所有这些事情,但它们都很棘手和复杂,并且会产生影响(直到可能使您的容器在主机上不受限制的 root 访问权限,并且您的容器启动时会主动重新配置一些底层主机详细信息)。
错误可能来自"service docker start"。如果您想按照 docker 容器的上游供应商的安装说明进行操作,那么您需要为此准备环境。我可以 运行 使用 dockers-systemctl-replacement 脚本轻松地执行这些命令。
我遇到了同样的问题,运行 在您的终端中执行此命令。这解决了问题。
sudo apt-get install docker-ce docker-ce-cli containerd.io
可能是您登录 docker 引擎的用户没有正确的权限。您可以使用以下命令将用户添加到 docker 组:
sudo usermod -a -G docker $USER
$USER 是当前登录用户的用户名。谢谢
试试这个命令:
sudo service docker restart
启动终端并执行以下命令:
$ sudo service --status-all
$ sudo service docker start
https://appuals.com/cannot-connect-to-the-docker-daemon-at-unix-var-run-docker-sock/
解决方案 4:使用服务命令
启动 Docker
1。检查 docker.service
sudo systemctl status docker
输出是这样的:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/docker.service.d
└─http-proxy.conf
Active: active (running) since Sat 2021-12-04 19:11:03 +0330; 2min 59s ago
Docs: https://docs.docker.com
Main PID: 28223 (dockerd)
Tasks: 29
CGroup: /system.slice/docker.service
└─28223 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.813464635+03:30" level=info msg="New memberlist node - Node:elitedesk will use memberlist nodeID:57d6b077dc1b with config:&{NodeID:57d6b077dc1b Hostname:elitedesk BindAddr:0.0.0.0 AdvertiseAddr:192.168.1.45 BindPort:0 Keys:[[214 188 67 83 106 206 215 54 212 222 237 172 208 101 235 219] [232 26 246 100 135 196 113 220 147 95 50 132 140 206 7 126] [236 55 254 140 107 62 111 184 64 103 33 77 246 154 26 50]] PacketBufferSize:1400 reapEntryInterval:1800000000000 reapNetworkInterval:1825000000000 StatsPrintPeriod:5m0s HealthPrintPeriod:1m0s}"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.813277123+03:30" level=info msg="Daemon has completed initialization"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.813269814+03:30" level=info msg="initialized VXLAN UDP port to 4789 "
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.814239176+03:30" level=info msg="Node 57d6b077dc1b/192.168.1.45, joined gossip cluster"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.814424565+03:30" level=info msg="Node 57d6b077dc1b/192.168.1.45, added to nodes list"
Dec 04 19:11:03 elitedesk systemd[1]: Started Docker Application Container Engine.
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.891119330+03:30" level=info msg="API listen on /var/run/docker.sock"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.964000220+03:30" level=error msg="error reading the kernel parameter net.ipv4.vs.conn_reuse_mode" error="open /proc/sys/net/ipv4/vs/conn_reuse_mode: no such file or directory"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.964029536+03:30" level=error msg="error reading the kernel parameter net.ipv4.vs.expire_nodest_conn" error="open /proc/sys/net/ipv4/vs/expire_nodest_conn: no such file or directory"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.964042003+03:30" level=error msg="error reading the kernel parameter net.ipv4.vs.expire_quiescent_template" error="open /proc/sys/net/ipv4/vs/expire_quiescent_template: no such file or directory"
如果似乎有错误,请重新启动它:
sudo systemctl restart docker
并再次检查 status
。如果没有解决,下一步
2。请求守护进程的socket,看是否up:
curl --unix-socket /var/run/docker.sock http://localhost/_ping; echo
输出只是 OK
消息
OK
如果没有得到 OK
而得到这样的东西:
curl: (7) Couldn't connect to server
3。检查套接字服务
sudo systemctl status docker.socket
一个好的输出将是:
● docker.socket - Docker Socket for the API
Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-12-04 19:10:57 +0330; 6min ago
Listen: /var/run/docker.sock (Stream)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/docker.socket
Dec 04 19:10:57 elitedesk systemd[1]: Starting Docker Socket for the API.
Dec 04 19:10:57 elitedesk systemd[1]: Listening on Docker Socket for the API.
并且重新启动它,即使它看起来不错。因为在停止守护进程并再次启动它之后,它不起作用,我们应该(据我所知)重新启动 docker.socket
.
sudo systemctl restart docker.socket
但是您无法修复它?下一个:
4。 运行 守护进程直接处于 debug
模式
sudo dockerd -D -l debug
我有以下 Dockerfile:
FROM ubuntu
ENV NPM_CONFIG_LOGLEVEL warn
ENV admin_user="PeerAdmin" network_name= version= hversion=hlfv1 fabrik_path=/fabric-tools project_dir=$(pwd)
ENV card_store_dir=$project_dir/.card-store stage_dir=$project_dir/.stage env_dir=$project_dir/env is_ok=1 FABRIC_VERSION=hlfv1
WORKDIR /app
COPY . /app
USER root
# RUN chown -R ubuntu:ubuntu .
WORKDIR /app
RUN apt-get update && \
mkdir "$fabrik_path" && \
cd "$fabrik_path" && \
export FABRIC_VERSION=hlfv1 && \
apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
apt-get -y install curl && \
apt-get -y install unzip && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
apt-get -y install docker.io && \
curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip && \
unzip fabric-dev-servers.zip && \
service docker start && \
./downloadFabric.sh && \
./startFabric.sh
正在尝试执行它,我收到错误消息:
**Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?**
service docker start
或 systemctl 之类的命令不起作用。
运行 Docker 与 sudo
。如果这不起作用,请按以下方式尝试 运行 守护程序:
sudo nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &
您不能 (*) 运行 Docker 在 Docker 容器或图像中。您不能 (*) 在 Docker 文件中启动后台服务。正如您所说,像 systemctl
和 service
这样的命令不会 (*) 在 Docker 的任何地方起作用。在任何情况下,您都不能从 Docker 文件中的任何位置使用任何主机系统资源,包括主机的 Docker 套接字。
您需要重新设计此 Docker 文件,使其只安装软件而不尝试启动它。理想情况下,一个容器将只启动一个服务器,并将 运行 它作为它的 CMD 在前台;否则,如果必须的话,您可能会依赖 supervisord 之类的东西来拥有多个服务器。如果您的应用程序严重依赖于能够在 Docker 中启动,您可能会发现在虚拟机中安装起来要容易得多。
(*) 从技术上讲,有很多方法可以完成所有这些事情,但它们都很棘手和复杂,并且会产生影响(直到可能使您的容器在主机上不受限制的 root 访问权限,并且您的容器启动时会主动重新配置一些底层主机详细信息)。
错误可能来自"service docker start"。如果您想按照 docker 容器的上游供应商的安装说明进行操作,那么您需要为此准备环境。我可以 运行 使用 dockers-systemctl-replacement 脚本轻松地执行这些命令。
我遇到了同样的问题,运行 在您的终端中执行此命令。这解决了问题。
sudo apt-get install docker-ce docker-ce-cli containerd.io
可能是您登录 docker 引擎的用户没有正确的权限。您可以使用以下命令将用户添加到 docker 组:
sudo usermod -a -G docker $USER
$USER 是当前登录用户的用户名。谢谢
试试这个命令:
sudo service docker restart
启动终端并执行以下命令:
$ sudo service --status-all
$ sudo service docker start
https://appuals.com/cannot-connect-to-the-docker-daemon-at-unix-var-run-docker-sock/ 解决方案 4:使用服务命令
启动 Docker1。检查 docker.service
sudo systemctl status docker
输出是这样的:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/docker.service.d
└─http-proxy.conf
Active: active (running) since Sat 2021-12-04 19:11:03 +0330; 2min 59s ago
Docs: https://docs.docker.com
Main PID: 28223 (dockerd)
Tasks: 29
CGroup: /system.slice/docker.service
└─28223 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.813464635+03:30" level=info msg="New memberlist node - Node:elitedesk will use memberlist nodeID:57d6b077dc1b with config:&{NodeID:57d6b077dc1b Hostname:elitedesk BindAddr:0.0.0.0 AdvertiseAddr:192.168.1.45 BindPort:0 Keys:[[214 188 67 83 106 206 215 54 212 222 237 172 208 101 235 219] [232 26 246 100 135 196 113 220 147 95 50 132 140 206 7 126] [236 55 254 140 107 62 111 184 64 103 33 77 246 154 26 50]] PacketBufferSize:1400 reapEntryInterval:1800000000000 reapNetworkInterval:1825000000000 StatsPrintPeriod:5m0s HealthPrintPeriod:1m0s}"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.813277123+03:30" level=info msg="Daemon has completed initialization"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.813269814+03:30" level=info msg="initialized VXLAN UDP port to 4789 "
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.814239176+03:30" level=info msg="Node 57d6b077dc1b/192.168.1.45, joined gossip cluster"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.814424565+03:30" level=info msg="Node 57d6b077dc1b/192.168.1.45, added to nodes list"
Dec 04 19:11:03 elitedesk systemd[1]: Started Docker Application Container Engine.
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.891119330+03:30" level=info msg="API listen on /var/run/docker.sock"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.964000220+03:30" level=error msg="error reading the kernel parameter net.ipv4.vs.conn_reuse_mode" error="open /proc/sys/net/ipv4/vs/conn_reuse_mode: no such file or directory"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.964029536+03:30" level=error msg="error reading the kernel parameter net.ipv4.vs.expire_nodest_conn" error="open /proc/sys/net/ipv4/vs/expire_nodest_conn: no such file or directory"
Dec 04 19:11:03 elitedesk dockerd[28223]: time="2021-12-04T19:11:03.964042003+03:30" level=error msg="error reading the kernel parameter net.ipv4.vs.expire_quiescent_template" error="open /proc/sys/net/ipv4/vs/expire_quiescent_template: no such file or directory"
如果似乎有错误,请重新启动它:
sudo systemctl restart docker
并再次检查 status
。如果没有解决,下一步
2。请求守护进程的socket,看是否up:
curl --unix-socket /var/run/docker.sock http://localhost/_ping; echo
输出只是 OK
消息
OK
如果没有得到 OK
而得到这样的东西:
curl: (7) Couldn't connect to server
3。检查套接字服务
sudo systemctl status docker.socket
一个好的输出将是:
● docker.socket - Docker Socket for the API
Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-12-04 19:10:57 +0330; 6min ago
Listen: /var/run/docker.sock (Stream)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/docker.socket
Dec 04 19:10:57 elitedesk systemd[1]: Starting Docker Socket for the API.
Dec 04 19:10:57 elitedesk systemd[1]: Listening on Docker Socket for the API.
并且重新启动它,即使它看起来不错。因为在停止守护进程并再次启动它之后,它不起作用,我们应该(据我所知)重新启动 docker.socket
.
sudo systemctl restart docker.socket
但是您无法修复它?下一个:
4。 运行 守护进程直接处于 debug
模式
sudo dockerd -D -l debug