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

Sha*_*awn 220 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?
Run Code Online (Sandbox Code Playgroud)

我刚刚浏览了用户指南并完全遵循了每一步,所以我很惊讶我收到了这条消息......我现在该怎么办?

我只是注意到,如果我不使用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
Run Code Online (Sandbox Code Playgroud)

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

我刚刚发现另一页说" 如果你使用的是OS X,那你不应该使用sudo." 我不知道他们是仅仅意味着这个例子,还是一般.

mau*_*uvm 149

对我来说,跑步$(boot2docker shellinit 2> /dev/null)修复了问题.

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

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


对于使用鱼壳的人:boot2docker shellinit ^ /dev/null | source.


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

  • 谢谢你提到鱼壳!解决了我的问题. (3认同)

Sal*_*ali 77

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

我解决了它:

boot2docker start
$(boot2docker shellinit)
Run Code Online (Sandbox Code Playgroud)

PS:感谢Alan.我发现在他们的官方文档中推荐这种方法.

PS2:boot2docker init在运行两个命令之前有时可能需要(谢谢Aaron).


ElM*_*esa 54

在我的情况下(Linux Mint 17)我做了各种各样的事情,我不确定哪些是完全必要的.

我包含了缺少的Ubuntu包:

$ sudo apt-get install apparmor lxc cgroup-lite
Run Code Online (Sandbox Code Playgroud)

用户已添加到组docker:

$ sudo usermod -aG docker ${USER}
Run Code Online (Sandbox Code Playgroud)

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

$ sudo docker -d
Run Code Online (Sandbox Code Playgroud)

谢谢\归属


由于奥斯曼·伊斯梅尔,因为也许这只是去年的事情...

愚蠢的问题,但你有没有启动docker守护进程? - Usman Ismail 2014年12月17日15:04


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

GitHub评论:

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

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

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


感谢brettof86关于openSUSE的评论

  • 谢谢!在我的情况下(Mint 17.1),缺少了apparmor. (2认同)
  • 将自己添加到docker组为我做了一件事,`sudo adduser $ USER docker`.让它在当前shell上生效的技巧是`curgroup = $(id -gn)&& newgrp docker && newgrp $ curgroup`,改编自http://superuser.com/questions/272061/reload-a-linux-users -group-分配,而无需采伐出 (2认同)

Pio*_*ost 48

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

来自Docker 1.6.0 的Docker命令行参考的Daemon套接字选项 章节:

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

Fedora的 Docker 安装说明中很好地描述了向用户授予权限所需的步骤:

授予用户使用Docker的权限

泊坞窗命令行工具的联系人通过套接字文件泊坞窗守护进程 /var/run/docker.sock所拥有root:root.虽然建议将sudo用于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的)的码头工人包都已经放置/var/run/docker.sock了在docker制作上述步骤的前两个不必要的组.

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


sup*_*cal 21

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

service docker start
Run Code Online (Sandbox Code Playgroud)

那为我修好了!


Yog*_*mat 14

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

访问Docker文档页面保护Docker守护程序套接字.

滚动一点到顶部,找到warning section清晰度.

  • @PawelBarcik可怕的错误,谢谢:`sudo usermod -a -G docker {username}` (3认同)

AL-*_*imi 12

你需要做:

$boot2docker init
$boot2docker start
Run Code Online (Sandbox Code Playgroud)

以下设置解决了此问题:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1
Run Code Online (Sandbox Code Playgroud)


Din*_*hen 10

您可能还没有该文件的权限.在我将自己添加到docker群组使用后,它发生在我身上

sudo gpasswd -a user docker
Run Code Online (Sandbox Code Playgroud)

但还没有退出.

要解决此问题,您可以重新登录,也可以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启用守护程序,而无需-TLS /


Paw*_*cik 6

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

sudo usermod -a -G docker myusername
Run Code Online (Sandbox Code Playgroud)

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

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

不要按照其他评论中的建议运行usermod没有"-a",否则它将擦除您的其他组设置,并将离开"docker"组

这将是会发生的事情:

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


Aar*_*all 5

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

boot2docker init
boot2docker up
Run Code Online (Sandbox Code Playgroud)

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

docker info
Run Code Online (Sandbox Code Playgroud)

应该告诉你它有效.


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

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

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

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Run Code Online (Sandbox Code Playgroud)

然后我们得到了用来安装virtualbox的cask,然后使用brew来安装docker和boot2docker(OS X都需要)不要使用sudo进行brew.:

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker
Run Code Online (Sandbox Code Playgroud)

解决方案

那是我们遇到问题的时候我们遇到的问题.以下修正了它.我理解这init是一次性交易,但up每次启动docker时你都可能需要运行:

boot2docker init
boot2docker up
Run Code Online (Sandbox Code Playgroud)

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

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

演示

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

docker run hello-world
docker run -it ubuntu bash
Run Code Online (Sandbox Code Playgroud)

那么你应该在容器中的root shell上:

apt-get install nano
exit
Run Code Online (Sandbox Code Playgroud)

回到本机用户bash:

docker ps -l
Run Code Online (Sandbox Code Playgroud)

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

docker commit 456789abcdef descriptivename`
Run Code Online (Sandbox Code Playgroud)


tom*_*ozb 5

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

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

或者,如果上述方法不起作用,您可能需要安装两个额外的依赖项:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)