Docker:您是否尝试连接未启用TLS的TLS启用守护程序?

51

在Linux Mint 17.1 x86_64操作系统上,内核版本为3.13.0-48-generic,OpenSSL版本为1.0.1f-1ubuntu2.11;每当我尝试执行任何Docker命令(例如docker logindocker 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 和普通用户身份运行这些命令,按照 此处的指示,在 ~/.profile 中添加了 $(boot2docker shellinit 2> /dev/null)重新启动我的电脑 并重新安装了 OpenSSL。

你有什么想法吗?这可能是硬件问题吗?


3
你在使用Mac OS吗?boot2docker是为Mac OS设计的。听起来你还没有启动docker守护进程。Docker分为两个部分,守护进程在后台运行,然后你用docker ps或docker run连接到守护进程。当你连接时,你在作为客户端运行docker。所以,请执行ps -ax | grep docker。如果它不在那里,则执行docker -d(或sudo docker -d)。 - Greg
是的,现在它可以工作了。由于某种原因,在文档中似乎没有提到 docker -d。顺便问一下,以 docker -d& 的方式运行它是否安全,这样我就可以恢复我的 shell? - strNOcat
由于您正在使用Mint,请查找Docker服务器的upstart脚本。 - Vitaly Isaev
重复的问题:我是否在尝试连接未启用TLS的守护程序? - Piotr Dobrogost
12个回答

23

您可以通过运行命令ps -ef来检查它是否已经启动。如果您想减少结果的数量,也可以使用| grep docker将其缩小到docker。如果它没有运行,请执行

sudo service docker start

如果还是不起作用,您可以参考此链接:

docker docs

您可以运行docker run -ddocker run -d &以便您可以在同一终端中使用它,甚至可以关闭它。 它将将值设置为true,因此您的容器将在后台以“分离”模式运行。

您还可以使用update-rc.d servicename defaults将其设置为在操作系统启动时自动启动,或者您也可以参考下面的链接,在其中将docker作为服务名称并设置默认值。

更多参考链接 - 自动启动, upstart

这些是不同的方法。


15

我在CentOS 7上部署了Docker,我的朋友帮忙检查了进程/服务docker是否正在运行。他使用了命令ps -ef | grep docker。结果发现该进程根本没有运行。最后,他使用命令service docker start启动了这个进程。最终问题得到了解决。


1
这正是关键所在。似乎根本不是什么“问题”。只需要运行docker守护进程才能使其工作。 - Beccari
你使用了 service docker start 还是 sudo service docker start? - lvthillo
或者在Linux上将其注册为服务运行:#systemctl enable docker.service - jonincanada

9

当我试着跟随一些在线资源时,我也遇到了这个问题;通过以超级用户身份运行 docker,我成功地解决了这个问题,您可以尝试在docker命令前添加sudo

sudo docker ps -a

sudo docker run hello-world

希望对您有所帮助。


1
在使用Linux时,sudo docker [command]解决了我的问题。 - Avec

9

尝试安装apparmor

sudo apt install apparmor

在这个答案中还有其他需要注意的地方,请参考。


我在更新内核后,在Ubuntu 12.04上进行了全新安装,但不知道为什么出现了这个错误。我通过安装AppArmor来解决它。 - armandfp
2
这个回答需要更多的赞。Ubuntu官方Docker安装说明缺少这一步骤。我已经在干净的Ubuntu系统中安装了三次Docker(一次运行12.04,两次运行14.04)。每次我都花了一个小时在网上搜索,最终又回到了这个SO的答案! - Doug Schmidt

4

当我通过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]#

3
今早我遇到了同样的问题。您可能只需要执行service docker start。它适用于CentOS(可能适用于所有),这是我总是忘记的那些小烦人的事情之一。
从技术上讲,当您首次安装诸如docker或httpd(apache)之类的服务时,它实际上需要启动,否则您将收到该错误。您还可以通过执行service service_name status查看其他服务的状态,但对于我的CentOS 7来说,就是这样。

1
当Docker服务无法启动时,可能会出现这种情况。 sudo service docker startrestart 返回没有输出并不意味着它已成功启动。您可以使用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容器。

1

我通过以sudo模式运行该命令来解决问题,例如"sudo docker images"


0
在我的情况下,是因为文件 /Users/user/.ssh/config 的权限设置为777。 要检查它,请在终端中运行 ssh docker@localhost

0
在按照https://docs.docker.com/linux/step_one/的步骤后遇到了同样的问题,docker服务正在运行,并且我也已经将用户添加到docker组中。但是在没有sudo的情况下无法使用docker命令。
对我有用的解决方法是重新启动电脑。 注意:在重新启动PC之前,我还尝试过停止和启动docker守护程序。我使用的是Ubuntu 12.04。

更多有关Ubuntu的安装和配置说明,请访问https://docs.docker.com/engine/installation/ubuntulinux/。 - mkcor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接