Docker:您是不是尝试连接到没有 TLS 的启用 TLS 的守护进程?
Posted
技术标签:
【中文标题】Docker:您是不是尝试连接到没有 TLS 的启用 TLS 的守护进程?【英文标题】:Docker: Are you trying to connect to a TLS-enabled daemon without TLS?Docker:您是否尝试连接到没有 TLS 的启用 TLS 的守护进程? 【发布时间】:2015-06-24 14:11:49 【问题描述】:在具有内核 3.13.0-48-generic 和 OpenSSL 版本 1.0.1f-1ubuntu2.11 的 Linux Mint 17.1 x86_64 上;每当我尝试执行任何 docker 命令(如 docker login
或 docker run hello-world
)时,都会出现以下错误:
FATA[0000] Get http:///var/run/docker.sock/v1.18/info: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
我使用sudo usermod -aG docker username
创建了一个名为docker
的组,我尝试以root 和正常方式运行命令,按照here、restarted my PC 的指示将$(boot2docker shellinit 2> /dev/null)
添加到~/.profile
并重新安装了OpenSSL。
知道我错过了什么吗?这可能是硬件问题吗?
【问题讨论】:
你用的是mac os吗? boot2docker 适用于 mac。在我看来,您还没有启动 docker 守护进程。 docker 分两部分运行,守护进程在后台运行。然后使用 docker ps 或 docker run 连接到守护进程。连接时,您将 docker 作为客户端运行。所以,做一个 ps -ax | grep 码头工人。如果不存在,则执行 docker -d (或 sudo docker -d) 是的,现在可以了。出于某种原因,文档中似乎没有提到docker -d
。顺便说一句,以docker -d &
运行它以便我拿回我的 shell 是否安全?
既然你使用的是 Mint,请寻找 docker server 的 upstart 脚本
重复Am I trying to connect to a TLS-enabled daemon without TLS?
【参考方案1】:
我在 CentOS 7 上部署了 docker,朋友先帮我检查了进程/服务docker
是否真的在运行。他使用了命令ps -ef | grep docker
。事实证明,该过程根本没有运行。最后,他使用命令service docker start
开始了这个过程。最后,问题解决了。
【讨论】:
这正是重点。似乎根本不是“问题”。它只是需要运行 docker 守护进程才能工作 你使用的是 service docker start 还是 sudo service docker start? 或者在linux上注册为服务运行:#systemctl enable docker.service【参考方案2】:按照https://docs.docker.com/linux/step_one/ 的步骤操作后遇到了同样的问题。 docker 服务正在运行,我还将用户添加到 docker 组。没有 sudo,docker 命令无法运行。
为我解决的问题是重新启动 PC。注意 - 在 PC 重新启动之前,我还尝试过停止和启动 docker 守护进程。我在 Ubuntu 12.04 上。
【讨论】:
【参考方案3】:我通过在 sudo 模式下运行该命令来解决它,例如“须藤泊坞窗图像”
【讨论】:
【参考方案4】:sudo chmod 777 /var/run/docker.sock
【讨论】:
虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。 chmod 777 赋予所有进程所有权限(读、写、执行),使用 777 是不好的做法,但它确实解决了你所说的问题@DonaldDuckchmod 777
?哦不。【参考方案5】:
您可以通过运行命令ps -ef
来检查它是否已启动。如果您想减少结果数量,也可以将其 grep 到 docker
(使用 | grep docker
)。如果没有运行,执行
sudo service docker start
如果还是不行的话
你可以参考这个链接
docker docs
您可以运行docker run -d
或docker run -d &
,这样您就可以使用相同的终端,甚至关闭它。它将值设置为 true,因此您的容器将在后台以“分离”模式运行。
您也可以在您的操作系统使用update-rc.d servicename defaults
启动时自动启动它,或者您也可以参考下面的链接,您必须将docker
作为服务名称和您的默认值。
更多链接可供参考 - auto start, upstart
这些是不同的方法。
【讨论】:
【参考方案6】:当 docker 服务无法启动时,可能会发生这种情况。
sudo service docker start
或 restart
没有返回输出并不意味着它启动成功。
您可以使用sudo /etc/init.d/docker status
找出它是否以及为什么无法启动。
在我的情况下,这是由于磁盘空间不足。
username@computer:~$ sudo service docker restart
username@computer:~$ sudo /etc/init.d/docker status
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit) since Mon 2015-12-21 15:11:59 PST; 21s ago
Docs: http://docs.docker.com
Process: 26463 ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS (code=exited, status=1/FAILURE)
Main PID: 26463 (code=exited, status=1/FAILURE)
Dec 21 15:11:59 computer docker[26463]: time="2015-12-21T15:11:59-08:00" level=info msg="Listening for HTTP on fd ()"
Dec 21 15:11:59 computer docker[26463]: time="2015-12-21T15:11:59-08:00" level=info msg="+job init_networkdriver()"
Dec 21 15:11:59 computer docker[26463]: time="2015-12-21T15:11:59-08:00" level=info msg="-job init_networkdriver() = OK (0)"
Dec 21 15:11:59 computer docker[26463]: time="2015-12-21T15:11:59-08:00" level=fatal msg="Shutting down daemon due to errors: Insertion failed because database is full: database or disk is full"
Dec 21 15:11:59 computer systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Dec 21 15:11:59 computer systemd[1]: Unit docker.service entered failed state.
Dec 21 15:11:59 computer systemd[1]: docker.service failed.
Dec 21 15:11:59 computer systemd[1]: start request repeated too quickly for docker.service
Dec 21 15:11:59 computer systemd[1]: Failed to start Docker Application Container Engine.
Dec 21 15:11:59 computer systemd[1]: docker.service failed.
删除一些文件后,我能够重新启动服务并正常运行docker容器。
【讨论】:
【参考方案7】:当我尝试关注一些在线资源时,我遇到了同样的问题;我可以通过以超级用户身份运行 docker 来解决此问题,尝试在您的 docker 命令之前添加 sudo
:
sudo docker ps -a
sudo docker run hello-world
希望对你有帮助。
【讨论】:
sudo docker [command]
在使用 Linux 时为我解决了这个问题。【参考方案8】:
当我从 Jenkins 创建 docker 映像时,我遇到了同样的问题,只需添加 用户到 docker 组,然后重新启动 docker 服务,在我的情况下,我必须重新启动 Jenkins 服务
这是我得到的错误
http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile
Solution:
[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker: [ OK ]
Starting docker: [ OK ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins [ OK ]
Starting Jenkins [ OK ]
[root@Jenkins ssh]#
【讨论】:
【参考方案9】:在我的情况下,这是因为文件 /Users/user/.ssh/config
的权限为 777。
检查它在终端ssh docker@localhost
中运行
【讨论】:
【参考方案10】:按照https://docs.docker.com/linux/step_one/ 的步骤操作后遇到了同样的问题。 docker 服务正在运行,我还将用户添加到 docker 组。没有 sudo,docker 命令无法运行。
为我解决的问题是重新启动 PC。 注意 - 在 PC 重新启动之前,我还尝试过停止和启动 docker 守护进程。我在 Ubuntu 12.04 上。
【讨论】:
更多关于 Ubuntu 的安装和配置说明可以在docs.docker.com/engine/installation/ubuntulinux找到。【参考方案11】:今天早上遇到了同样的问题。你可能只想做service docker start
。它适用于 centos(适用于所有人),它是我一直忘记的那些小问题之一。
从技术上讲,当您第一次安装诸如 docker 或 httpd (apache) 之类的服务时,它需要实际启动,否则您将收到该错误。你也可以通过service service_name status
查看其他服务的状态,但我的centos 7也是这样。
【讨论】:
【参考方案12】:尝试安装 apparmor
sudo apt install apparmor
还有其他事情要寻找in this answer。
【讨论】:
我在 ubuntu 12.04 上进行了全新安装(更新内核后),我不知道为什么会出现这个错误,我解决了安装 apparmor 这个答案需要更多的支持。 Ubuntu 的官方 Docker 安装说明缺少此步骤。我现在已经在干净的 Ubuntu 系统中安装了 Docker 三次(一次运行 12.04,两次运行 14.04)。每次我花一个小时在网上搜索时,都会偶然发现这个 SO 答案!以上是关于Docker:您是不是尝试连接到没有 TLS 的启用 TLS 的守护进程?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用启用了 TLS 的连接的 python 连接到 Sybase 和 Azure SQL 服务器
Java 邮件无法使用 tls 或 ssl 连接到 smtp
无法使用 ngrok 连接到 https://localhost(使用 TLS / SSL)