Docker错误:/var/run/docker.sock:没有这个文件或目录。

93

我是docker的新手。我有一个将数据加载到impala的shell脚本,我想要一个Docker文件,可以构建镜像并运行容器。 我使用的是Mac,已安装boot2docker,并设置了DOCKER_HOST环境变量。

bash-3.2$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.15.3-tinycore64
Debug mode (server): true
Debug mode (client): false
Fds: 10
Goroutines: 10
EventsListeners: 0
Init Path: /usr/local/bin/docker
Sockets: [unix:///var/run/docker.sock tcp://0.0.0.0:2375]

我试图使用以下命令安装预构建映像:

sudo docker pull busybox

我遇到了这个错误:

sudo docker pull busybox 2014/08/18 17:56:19 Post http:///var/run/docker.sock/images/create?fromImage=busybox&tag=: dial unix /var/run/docker.sock: no such file or directory

我的docker设置出了什么问题吗?

当我执行docker pull busybox时,它会拉取镜像并下载完成。

bash-3.2$ docker pull busybox
Pulling repository busybox
a9eb17255234: Download complete 
fd5373b3d938: Download complete 
d200959a3e91: Download complete 
37fca75d01ff: Download complete 
511136ea3c5a: Download complete 
42eed7f1bf2a: Download complete 
c120b7cab0b0: Download complete 
f06b02872d52: Download complete 
120e218dd395: Download complete 
1f5049b3536e: Download complete 
bash-3.2$ docker run busybox /bin/echo Hello Doctor
Hello Doctor

我有所遗漏吗?


1
我遇到了同样的问题。 我重新启动了我的笔记本电脑。 所以它开始为我工作了。 (请参阅https://docs.docker.com/installation/ubuntulinux/) 他们也提到了重新启动计算机。 - NehaG
1
当我连接到互联网时,这对我起作用了,但我不知道为什么会发生这种情况 :( - Sai Ram
@NehaG,你的解决方案最好。 - Soumalya Bhattacharya
14个回答

89

当您使用boot2docker时,不需要以sudo运行任何docker命令,因为传递到boot2docker VM的每个命令默认都是以root身份运行的。

当您以sudo身份运行时,会看到错误,因为只有您的用户设置了DOCKER_HOST环境变量,而sudo没有设置。

您可以通过执行以下操作来确认这一点:

$ env

Then a

$ sudo env

需要在每个输出中查找 DOCKER_HOST

如果您想要一个运行您的脚本的docker文件,可以尝试以下内容:

Dockerfile

FROM busybox

# Copy your script into the docker image
ADD /path/to/your/script.sh /usr/local/bin/script.sh

# Run your script
CMD /usr/local/bin/script.sh

那么你可以运行:

docker build -t your-image-name:your-tag .

这将构建您的Docker镜像,您可以通过执行以下操作查看:
docker images

然后,要运行您的容器,可以执行以下操作:

docker run your-image-name:your-tag

使用此运行命令,将从使用您的Dockerfile和构建命令创建的镜像启动容器,然后在您的script.sh执行完成后结束。


1
抱歉我的无知,但我认为我没有成功构建 "docker images"。会出现以下错误:2014/08/19 11:11:45 Get http:///var/run/docker.sock/v1.13/images/json: dial unix /var/run/docker.sock: no such file or directory。Docker是否应该放在主目录中?它可以用任何名称命名吗?这与 "image-name" 相同吗? - user1189851
你能复制一下你正在使用的构建Docker镜像的命令吗?听起来你在OSX机器上仍在使用sudo,但其实不应该这样做。 - Chris McKinnel
$ docker build -t /Users/ig/Documents/tests/hellodocker .2014/08/19 11:18:09 命名空间名称无效(),只允许[a-z0-9_],大小在4到30之间;而hellodocker只有您提供的dockerfile的内容。非常感谢。 - user1189851
是的,你正在尝试使用文件路径标记你的Docker镜像 - 在-t后面尝试其他内容,比如your-image-name:a-tag - Chris McKinnel
请给我命令行,我搞糊涂了。我的Docker文件名是hellodocker,路径已经给出。 - user1189851

45

使用shellinit可以快速设置您的环境。

在您的命令提示符处执行:

$(boot2docker shellinit)  

这将填充并导出环境变量,并初始化其他功能。


26

在我的 MAC 上,当我在终端上使用以下命令启动 boot2docker-vm 时

boot2docker start

我看到了以下内容

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_CERT_PATH=<my things>
    export DOCKER_TLS_VERIFY=1
    export DOCKER_HOST=tcp://<ip>:2376

设置了这些环境变量后,我能够成功运行构建过程,没有出现问题。

更新[2016-04-28]如果你正在使用最近版本的docker,你可以执行

eval $(docker-machine env)将设置环境变量

(docker-machine env将打印出导出语句)


2
你也可以将它们添加到你的终端配置文件中以节省时间。虚拟机会告诉你它们已经设置好了。 - Joe Susnick

26

docker pull 如果 docker service 没有运行将会失败。请确保它正在运行:

:~$ ps aux | grep docker
root     18745  1.7  0.9 284104 13976 ?   Ssl  21:19   0:01 /usr/bin/docker -d

如果它没有运行,您可以通过

sudo service docker start

对于Ubuntu 15及以上版本,请使用

sudo systemctl start docker


16

我也遇到了这个错误。尽管我没有使用boot2docker,而是在Ubuntu上安装了“纯”docker(请参见https://docs.docker.com/installation/ubuntulinux/)。

我出现了错误(“拨号unix /var/run/docker.sock:没有这样的文件或目录。 您是否尝试连接未启用TLS的守护程序?”,因为docker守护进程还没有运行 。

在Ubuntu上,您需要启动该服务

sudo service docker start

另请参见http://blog.arungupta.me/resolve-dial-unix-docker-sock-error-techtip64


9

对于Windows上的boot2docker,在看到以下内容后:

FATA[0000] Get http:///var/run/docker.sock/v1.18/version: 
dial unix /var/run/docker.sock: no such file or directory.  
Are you trying to connect to a TLS-enabled daemon without TLS?

我所做的只是:

boot2docker start
boot2docker shellinit

那样生成:

export DOCKER_CERT_PATH=C:\Users\vonc\.boot2docker\certs\boot2docker-vm
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://192.168.59.103:2376

最后:
boot2docker ssh

Docker 又可以工作了


6
在Linux中,首先在终端中执行sudo service docker start

5
如果你正在使用CentOS 7,并且通过yum安装了Docker,请不要忘记运行以下命令:
$ sudo systemctl start docker
$ sudo systemctl enable docker

这将启动服务器,并在开机时自动重新启动。

4
为了设置您的环境并保留它以供将来使用,可以执行以下操作:
echo 'export DOCKER_HOST="tcp://$(boot2docker ip 2>/dev/null):2375";' >> ~/.bashrc

然后: source ~/.bashrc 这样你的环境将在每个会话中设置好。

3
如果有人碰巧看到这个:对于Mac上的Docker桌面版,您需要在设置中启用此选项 enter image description here

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