簡體   English   中英

在Docker容器中安裝Web應用程序:撥打unix /var/run/docker.sock:沒有這樣的文件或目錄

[英]Installing a web application in a Docker container: dial unix /var/run/docker.sock: no such file or directory

我正在嘗試在Docker容器中安裝Web應用程序。

我正在使用OS X Yosemite版本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

在這一點上,一切似乎都正常。

  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

這是我的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`

任何幫助將非常感激。 謝謝

您具體案例的簡短回答:不要使用sudo

原因如下:

當您使用boot2docker ,該docker守護程序在虛擬機上運行,本質上是不同的機器上。 要與另一台計算機上的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)。 因此錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM