我是否尝试连接到启用TLS的守护进程而不使用TLS?
我正在尝试了解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?
我刚刚阅读了用户指南 ,完全按照每一个步骤操作,所以我很惊讶,我收到了这个消息…现在该怎么办?
我只注意到,如果我不使用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
当然,这不是一个解决scheme,因为我可能需要在路的某个地方使用sudo
。
我刚刚发现另一个网页说:“ 如果你使用OS X,那么你不应该使用sudo
。” 我不知道他们是仅仅为了这个例子,还是一般的意思。
对我来说,运行$(boot2docker shellinit 2> /dev/null)
修复了这个问题。
这将在当前terminal会话中运行boot2docker shellinit
命令(三个set -x ...
行)的输出,该命令让docker命令知道在哪里可以findboot2docker虚拟机。
将$(boot2docker shellinit 2> /dev/null)
到~/.bash_profile
文件的底部将确保每次打开terminal时都configurationdocker
命令。
对于使用Fish shell的用户: boot2docker shellinit ^ /dev/null | source
boot2docker shellinit ^ /dev/null | source
。
请注意, 2> /dev/null
(和Fish等效的^ /dev/null
)是可选的。 就像@ pablo-fernandezbuild议的那样,这隐藏了Writing ..
线条。
我用sudo在MacOS上得到同样的错误,没有它。
我已经解决了它:
boot2docker start $(boot2docker shellinit)
PS:感谢Alan。 我发现这种方法是在他们的官方文档中推荐的。
PS2:在运行两个命令之前,有时需要boot2docker init
(谢谢Aaron)。
在我的情况下(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守护程序? – 乌斯曼伊斯梅尔14年12月17日在15:04
感谢github @ MichaelJCole提供的解决scheme,因为我在阅读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
感谢fredjean.net发布的注意丢失的软件包,并忘记默认的Ubuntu安装说明和谷歌其他方式
事实certificate,在Linux Mint上,cgroup-lite和lxc软件包默认不安装。 安装两个,然后让我在基本图像中运行bash,然后构build并运行我的图像。
感谢brettof86对openSUSE的评论
下划线问题很简单 – 缺less/var/run/docker.sock
unix域套接字的权限。
从Docker 1.6.0的Docker命令行参考的守护程序套接字选项 一章 :
默认情况下,在
/var/run/docker.sock
创build一个unix域套接字(或IPC套接字), 需要root权限或docker组成员资格 。
授予用户权限的步骤在Fedora的 Docker 安装说明中有很好的描述:
授予用户使用Docker的权利
docker命令行工具通过由
root:root
拥有的套接字文件/var/run/docker.sock
联系docker守护进程。 尽pipebuild议使用sudo作为docker命令,但如果用户希望避免这种情况,pipe理员可以创build一个docker组,并拥有自己的/var/run/docker.sock
,并将用户添加到该组中。
$ sudo groupadd docker
$ sudo chown root:docker /var/run/docker.sock
$ sudo usermod -a -G docker $USERNAME
注销并重新login以使上述更改生效。 请注意,某些Linux发行版(Ubuntu)的Docker包已经在docker
组中放置了/var/run/docker.sock
,这使得上面的两个步骤不再需要。
在OS X和boot2docker
的情况下情况是不同的; Docker守护进程在虚拟机内运行,所以DOCKER_HOST
环境variables必须设置为这个虚拟机,这样Docker客户端才能findDocker守护进程。 这是通过在shell中运行$(boot2docker shellinit)
来完成的。
确保Docker守护进程正在运行:
service docker start
为我修好了!
- Docker自称是Linux容器的一个自给自足的运行时。 简而言之,它既作为服务器又作为客户端。
-
$ docker version
命令查询是Docker可执行文件的内部,而不是运行的守护进程/服务。 -
$ docker images or $ docker ps or $ docker pull centos
是发送查询到docker守护进程/服务运行的命令。 - 默认情况下,Docker支持到其守护进程/服务的TLS连接。
- 只有当你login的用户是用户组
docker
一部分,或者你已经在sudo
之前使用了sudo
,例如$ sudo docker images
,是否需要TLS连接。
访问Docker文档页面保护Docker守护进程套接字 。
向上滚动一下,findwarning section
以获得清晰。
你需要做的是:
$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
您可能还没有该文件的权限。 我把自己添加到docker
组使用后发生在我身上
sudo gpasswd -a user docker
但还没有注销。
要解决这个问题,您可以重新login,或在注销之前使用sg docker "docker <subcommand> ..."
。
如果您在/etc/group
中的组docker
中,则应该可以在不input密码的情况下运行它。
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 /
在Ubuntu上安装lxc-docker之后,你需要把你的用户添加到docker用户组中:
sudo usermod -a -G docker myusername
这是因为套接字文件的权限:
srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock
不要像其他评论中的build议那样运行usermod ,否则它会擦除你的其他组的设置,并将离开“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)
TLDR :当我在安装docker的时候运行一个诊所,而且大部分用户都在OS X上时,这让我的Python meetup组过去了这个问题:
boot2docker init boot2docker up
然后运行输出给你的输出命令
docker info
应该告诉你它的工作原理。
背景(是什么使我们面对这个问题)
我带领一家诊所安装Docker,大部分与会者都有OS X,我们遇到了这个问题,并在几台机器上克服了这个问题。 以下是我们所遵循的步骤:
首先,我们安装了自制软件(是的,有些参与者没有):
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后,我们得到了我们用来安装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
解决scheme
那是当我们遇到这个问题的时候。 以下修复它。 我知道init
是一次性交易,但每次启动docker时都可能需要运行up
:
boot2docker init boot2docker up
然后当运行时,它提供了几个export
命令。 复制粘贴并运行这些。
最后docker info
应该告诉你它已经正确安装。
演示
其余的命令应该演示它。 (在Ubuntu Linux上,我需要sudo。)
docker run hello-world docker run -it ubuntu bash
那么你应该在容器的根目录下:
apt-get install nano exit
回到你的本地用户bash:
docker ps -l
在“容器ID”下查找大约12位hex(0-9或af)标识符,例如456789abcdef
。 然后,您可以提交您的更改并将其命名为描述性名称,如descriptivename
性名称:
docker commit 456789abcdef descriptivename`
在Ubuntu 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
我在这里尝试了解决scheme,boot2docker没有工作。
我的解决scheme:在Mac上卸载boot2docker,在VirtualBox中安装Centos 7虚拟机,并在该虚拟机内部使用Docker。
对我来说,以下步骤起作用:
- 我注意到,运行
docker run hello-world
失败,如在问题中的这个socked错误,但运行sudo docker run hello-world
工作。 - 我将我的当前用户添加到
docker
组,sudo adduser user docker
。 然后,您必须重新启动机器或使用su - user
(如果在docker
组中,使用groups
命令检查)。
之后, hello-world
开始工作。
我的答案是基于如何使用docker没有sudo? 这解释了什么问题。
为了什么是值得的,我试了这个问题的所有解决scheme,在这个相关的问题 ,没有解决我的问题,直到我卸载并重新安装VirtualBox 。 这个过程把VirtualBox从版本4.2.16升级到了4.3.22(我以前的系统在系统上已经闲置了几个月)。
然后boot2docker
和docker
工作没有任何其他的调整。
我有同样的问题。 一个简单的service docker restart
解决了这个问题。
我有同样的问题,并试图解决这个问题,修改.bash_profile文件,login和退出,没有任何运气。 最后,重新启动我的机器修复它。
确保有
127.0.0.1 localhost
在你的
`/etc/hosts `
文件。
当我从Jenkins创buildDocker镜像时遇到同样的问题。 只需将用户添加到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]#
另一个可能的原因是您的BIOS CPU可视化未启用。 去启用它!