在Docker容器中安装Web应用程序:拨打unix /var/run/docker.sock:没有这样的文件或目录

时间:2014-12-19 01:24:40

标签: node.js docker boot2docker

我试图在Docker容器中安装Web应用程序。

我使用OS X优胜美地版本10.10.1

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

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

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

    $ boot2docker init $ boot2docker start $ (boot2docker shellinit)

  3. 然后我按照终端的指示,使用以下命令设置环境变量:

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

  4. 此时,一切似乎都正常。

    1. 然后,按照Dockerizing Node.js应用程序的教程,我明白了这一点:https://docs.docker.com/examples/nodejs_web_app/#building-your-image,您可以在其中输入命令:

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

    2. 然后要求输入密码,然后在输入后我不断收到此错误消息:

      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

    3. 以下是我的env变量:

      `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`
      

      任何帮助都会非常感激。感谢

1 个答案:

答案 0 :(得分:21)

针对您的具体案例的简短回答:请勿使用sudo

原因如下:

使用boot2docker时,docker守护程序在VM中运行,主要在不同的计算机上运行。要与另一台计算机上的docker守护程序通信,必须使用TLS连接(通过HTTPS连接到守护程序的REST API)。这就是您必须设置DOCKER_HOSTDOCKER_CERT_PATH的原因。由于守护程序在另一台计算机上运行,​​因此您不需要是root用户与之通信,因为传出的http连接不需要root,这与尝试与unix:///var/run/docker.sock套接字通信不同。

但是当你运行sudo docker时,突然间你是另一个用户,你就是root。您设置为常规帐户的环境变量未设置。因此docker CLI使用其默认通信方法:unix套接字。套接字不存在,因为守护程序在另一台机器上运行(boot2docker vm)。因此错误信息。