我是否尝试连接到没有TLS的启用TLS的守护程序?

时间:2014-12-17 14:54:17

标签: docker

我正在尝试了解Docker,但我一直对此感到疑惑(对我而言)错误消息。

可能最简单的例子是尝试打印我安装的Docker版本:

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

我刚刚经历user guide并完全遵循每一步,所以我很惊讶我收到了这条消息......我现在该怎么办?

我刚注意到,如果我不使用sudo,我就不会收到错误:

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

当然,这不是一个解决方案,因为我可能需要在某个地方使用sudo ......

我刚发现another page说“如果您使用的是OS X ,则不应使用sudo。”我不知道它们是仅仅代表那个例子,还是一般。

20 个答案:

答案 0 :(得分:149)

对我来说,运行$(boot2docker shellinit 2> /dev/null)解决了问题。

这会在当前终端会话中运行boot2docker shellinit命令(三个set -x ...行)的输出,这使docker命令知道在哪里可以找到boot2docker虚拟机。 / p>

$(boot2docker shellinit 2> /dev/null)添加到~/.bash_profile文件的底部将确保每次打开终端时都配置了docker命令。


对于使用Fish shell的人:boot2docker shellinit ^ /dev/null | source


请注意,2> /dev/null(和鱼等效^ /dev/null)是可选的。就像@ pablo-fernandez建议的那样,这隐藏了Writing ..行。

答案 1 :(得分:77)

我在使用sudo的MacOS上遇到了同样的错误,没有它。

我用以下方法解决了这个问题:

boot2docker start
$(boot2docker shellinit)

P.S。:感谢Alan。我发现their official documentation建议采用这种方法。

P.S.2:在运行两个命令之前,有时可能需要boot2docker init(谢谢Aaron)。

答案 2 :(得分:54)

就我而言(Linux Mint 17),我做了各种各样的事情,而且我不确定哪些是完全必要的。

我包含了丢失的Ubuntu软件包:

$ sudo apt-get install apparmor lxc cgroup-lite

用户已添加到群组docker

$ sudo usermod -aG docker ${USER}

启动守护程序(openSUSE只需要这个)

$ sudo docker -d

感谢\归因


感谢Usman Ismail,因为也许这只是最后一件事......

  

愚蠢的问题,但你启动了docker守护进程吗? - Usman Ismail 12月17日&14; 14日15:04


还要感谢github@MichaelJCole解决方案对我有用,因为当我阅读Usman的评论时,我没有检查守护进程。

GitHub comment

sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash

感谢fredjean.net post注意到丢失的软件包,忘记了默认的Ubuntu安装说明,并谷歌了解其他方式

  

事实证明,Linux Mint上默认不安装cgroup-lite和lxc软件包。然后安装两个允许我在基本映像中运行bash,然后构建并运行我的映像。


感谢brettof86关于openSUSE的评论

答案 3 :(得分:48)

下划线问题很简单 - 缺少/var/run/docker.sock unix域套接字的权限。

来自Docker 1.6.0的 Docker命令行参考的后台程序套接字选项 chapter

  

默认情况下,会创建一个unix域套接字(或IPC套接字)   /var/run/docker.sock需要root权限或docker   小组成员

在Docker installation instructions for Fedora中很好地描述了向用户授予权限所需的步骤:

  

授予用户使用Docker的权限

     

docker命令行工具   通过套接字文件联系docker守护程序进程   /var/run/docker.sock拥有root:root。虽然建议   如果用户希望避免使用sudo for docker命令,请使用sudo   管理员可以创建一个docker组,拥有它   /var/run/docker.sock,并将用户添加到此论坛。

     

$ sudo groupadd docker
  $ sudo chown root:docker /var/run/docker.sock
  $ sudo usermod -a -G docker $USERNAME

注销并重新登录以使上述更改生效。 请注意,某些Linux发行版(Ubuntu)的Docker软件包已经将/var/run/docker.sock放在docker组中,因此不需要上述前两个步骤。

在OS X和boot2docker的情况下情况不同; Docker守护程序在VM内部运行,因此必须将DOCKER_HOST环境变量设置为此VM,以便Docker客户端可以找到Docker守护程序。这是通过在shell中运行$(boot2docker shellinit)来完成的。

答案 4 :(得分:21)

确保Docker守护程序正在运行:

service docker start

为我修好了!

答案 5 :(得分:14)

  1. Docker将自己称为Linux容器的自给自足运行时。 简单来说,它既可以作为服务器也可以作为客户端。
  2. $ docker version命令查询是Docker可执行文件的内部查询,而不是运行的守护程序/服务。
  3. $ docker images or $ docker ps or $ docker pull centos是向运行的docker守护程序/服务发送查询的命令。
  4. 默认情况下,Docker支持与其守护程序/服务的TLS连接。
  5. 仅当您登录的用户是用户组docker的一部分或您在命令之前使用过sudo时,例如$ sudo docker images,是否需要TLS连接。
  6. 访问Docker文档页面 Protect the Docker daemon socket

    滚动一点到顶部并找到warning section以便清楚。

答案 6 :(得分:12)

你需要这样做:

$boot2docker init
$boot2docker start

以下设置解决了问题:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

答案 7 :(得分:10)

您可能还没有该文件的权限。 在我使用

将自己添加到docker群组后,它发生在我身上
sudo gpasswd -a user docker

但还没有退出。

要解决此问题,您可以重新登录或使用 在您退出之前sg docker "docker <subcommand> ..."

如果您位于docker中的/etc/group组,则应该可以在不输入密码的情况下运行它。

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a-tls-enabled-daemon-without-tls/

答案 8 :(得分:6)

在安装 lxc-docker 后的Ubuntu上,您需要将用户添加到 docker 用户组:

sudo usermod -a -G docker myusername

这是因为套接字文件权限:

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

请勿按其他任何一条评论中的建议运行usermod没有&#34; -a&#34; ,否则它将擦除您的其他群组设置,并将离开&#34;泊坞广告& #34;组

这将会发生:

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

答案 9 :(得分:5)

TLDR :当我在安装docker的诊所运行时,我的Python聚会小组遇到了这个问题,大多数用户都在OS X上:

boot2docker init
boot2docker up

运行输出给你的export命令,然后

docker info

应该告诉你它有效。


上下文(是什么让我们遇到了问题)

我带领一家诊所安装了docker,大多数与会者都有OS X,我们遇到了这个问题,我在几台机器上克服了它。以下是我们遵循的步骤:

首先,我们安装了自制软件(是的,有些与会者没有):

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后我们得到了用于安装virtualbox的cask,然后使用brew来安装docker和boot2docker(OS X所需的全部内容)Don't use sudo for brew.

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker

解决方案

那是我们遇到问题的时候我们遇到的问题。以下修正了它。我理解init是一次性合约,但每次启动泊坞广告时,您可能需要运行up

boot2docker init
boot2docker up

然后当up运行时,它会发出几个export命令。复制粘贴并运行它们。

最后docker info应该告诉你它已正确安装。

演示

其余命令应该演示它。 (在Ubuntu linux上我需要sudo。)

docker run hello-world
docker run -it ubuntu bash

然后你应该在容器中的root shell上:

apt-get install nano
exit

返回您的原生用户bash:

docker ps -l

在“容器ID”下查找大约12位十六进制(0-9或a-f)标识符,例如456789abcdef。然后,您可以提交更改并将其命名为一些描述性名称,例如descriptivename

docker commit 456789abcdef descriptivename`

答案 10 :(得分:3)

在Linux Ubuntu / Mint上运行Docker所需的一切:

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart

如果以上操作无效,您可能需要安装另外两个依赖项:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

答案 11 :(得分:2)

我在这里尝试了解决方案,并且boot2docker无效。

我的解决方案:在Mac上卸载boot2docker,在VirtualBox中安装Centos 7 VM,并在该VM中使用Docker。

答案 12 :(得分:2)

对我来说,以下步骤有效:

  1. 我注意到,运行docker run hello-world失败了,问题出现了这个socked错误,但正在运行sudo docker run hello-world
  2. 我将当前用户添加到docker群组sudo adduser user docker。然后,您必须重新启动计算机或使用su - user(如果在groups组中,请使用docker命令进行检查。)
  3. 之后,hello-world开始工作。

    我的回答基于 How can I use docker without sudo? ,它解释了什么问题。

答案 13 :(得分:1)

对于它的价值,我尝试了这个问题和this related question中的所有解决方案,并且在我卸载并重新安装VirtualBox之前,没有解决我的问题。这个过程将VirtualBox从版本4.2.16升级到4.3.22(我之前的一个在系统上闲置了几个月)。

然后boot2dockerdocker在没有任何其他调整的情况下工作。

答案 14 :(得分:1)

我遇到了同样的问题。一个简单的service docker restart解决了这个问题。

答案 15 :(得分:0)

确保有

127.0.0.1    localhost

中的

`/etc/hosts `

文件。

答案 16 :(得分:0)

我有同样的问题并尝试了各种方法来解决这个问题,修改.bash_profile文件,登录和注销,没有任何运气。最后,重新启动我的机器修复它。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

Docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字是由root用户拥有的,其他用户只能使用sudo访问它。 Docker守护程序始终以root用户身份运行。

sudo groupadd docker
sudo usermod -aG docker $USER

注销并重新登录,以便重新评估您的组成员身份。

docker run hello-world

来源:Manage Docker as a non-root user

答案 19 :(得分:-1)

另一个可能的原因是您的 BIOS CPU可视化未启用。先去启用吧!