在Docker容器中安装Web应用程序:dial unix /var/run/docker.sock:no such file or directory

我正在尝试在一个Docker容器中安装一个Web应用程序。

我正在使用OS X Yosemite版本10.10.1

我一直在关注Dockerizing一个Node.js Web应用程序的教程: https ://docs.docker.com/examples/nodejs_web_app/

  1. 我下载并安装了boot2docker osx-installer:github.com/boot2docker/osx-installer/releases/tag/v1.4.1

  2. 我按照以下顺序在控制台中input了这些命令:

    $ boot2docker init $ boot2docker start $ (boot2docker shellinit)

  3. 然后按照terminal的指示设置环境variables,命令如下:

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

在这一点上,一切似乎都行得通。

  1. 然后,按照Dockerizing一个Node.js应用程序的教程,我到了这里: https ://docs.docker.com/examples/nodejs_web_app/#building-your-image,在那里你input命令:

    $ sudo docker build -t <your username>/centos-node-hello .

  2. 然后是要求input密码,然后input它,我不断收到此错误消息:

    Sending build context to Docker daemon FATA[0000] Post http:///var/run/docker.sock/v1.16/build?rm=1&t=myusername%2Fcentos-node- hello: dial unix /var/run/docker.sock: no such file or directory

这里是我的环境variables:

 `TERM_PROGRAM=Apple_Terminal TERM=xterm-256color SHELL=/bin/bash TMPDIR=/var/folders/vb/vmd78vk57mqd6fv7sqb544pc0000gn/T/ DOCKER_HOST=tcp://192.168.59.103:2376 Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.BBIW525XNA/Render TERM_PROGRAM_VERSION=343 OLDPWD=/Users/myusername/Desktop TERM_SESSION_ID=FAD1F3F1-35DF-4183-A47A-08749EAFEACB USER=myusername SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.A6ZjHwx8eq/Listeners __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0 DOCKER_TLS_VERIFY=1 PATH=/Users/myusername/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin PWD=/Users/myusername/Desktop/docker LANG=en_CA.UTF-8 vXPC_FLAGS=0x0 XPC_SERVICE_NAME=0 DOCKER_CERT_PATH=/Users/myusername/.boot2docker/certs/boot2docker-vm HOME=/Users/myusername SHLVL=1 LOGNAME=myusername DISPLAY=/private/tmp/com.apple.launchd.IesbS7VdCy/org.macosforge.xquartz:0 SECURITYSESSIONID=186a5 _=/usr/bin/env` 

我的Docker版本:

 `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

原因如下:

当你使用boot2dockerboot2docker守护进程在虚拟机上运行,​​实质上是在不同的机器上运行。 要与另一台机器上的docker守护程序进行通信,必须使用TLS连接(通过HTTPS访问守护程序的REST API)。 这就是为什么你必须设置DOCKER_HOSTDOCKER_CERT_PATH 。 由于守护进程在另一台机器上运行,因此与进行通信无关,因为传出的http连接不需要root,与尝试使用unix:///var/run/docker.socksockets。

但是当你运行sudo docker ,突然你是一个不同的用户,你是root 。 您设置为常规帐户的环境variables未设置。 所以docker CLI使用它的默认通信方法: unix套接字。 该套接字不在那里,因为守护进程在另一台机器( boot2docker机)上运行。 因此,错误消息。