无法从docker-compose连接到docker
我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。
Docker-machine运行正常,并且可以通过docker-machine ssh进行连接。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM dev * virtualbox Running tcp://192.168.99.100:2376
但是不能从docker-compose连接。
$ docker-compose up Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running? If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
我的Dockerfile和docker-compose.yml在这里。
Dockerfile
FROM centos:centos7 DOCKER_HOST tcp://192.168.99.100:2376
泊坞窗,compose.yml
web: build: .
为什么不能连接? 有任何想法吗?
Docker机器正在运行。 但是您需要导出一些环境以连接到Docker机器。 默认情况下, docker
CLI客户http+unix://var/run/docker.sock
尝试使用http+unix://var/run/docker.sock
(如错误消息中所示)与守护程序进行通信。
使用eval $(docker-machine env dev)
导出正确的环境variables,然后重试。 您也可以运行docker-machine env dev
来查看它将要导出的环境variables。 请注意,其中一个是DOCKER_HOST
,就像错误消息表明您可能需要设置一样。
简单的解决scheme: sudo docker-compose up
更新2016年3月14日:在docker安装过程(或docker组成?)中的某个点,有一个build议和示例将您的用户名添加到“docker”组。 这样可以避免在所有docker命令之前需要“sudo”,如下所示:
~ > docker run -it ubuntu /bin/bash root@665d1ea76b8d:/# date Mon Mar 14 23:43:36 UTC 2016 root@665d1ea76b8d:/# exit exit ~ >
仔细看一下安装命令的输出(docker&docker-compose的第二次安装),你会发现必要的步骤。 这也logging在这里: https : //subosito.com/posts/docker-tips/
须藤? 没有!
厌倦了每次发布命令时都要inputsudo docker? 是的,有办法处理这个。 尽pipedocker自然需要一个root用户,但是我们可以为docker操作提供一个等同于root的组。
您可以创build一个名为docker的组,然后将所需的用户添加到该组。 重新启动docker服务后,用户将不需要每次执行docker操作时都键入sudo。 它在shell命令上的外观如何? 作为根,在这里你去:
> sudo groupadd docker > sudo gpasswd -a username docker > sudo service docker restart
完成!
更新2017-3-9
Docker安装说明已经在这里更新了。
Linux的安装后步骤
本节包含configurationLinux主机以更好地与Docker配合使用的可选步骤。
以非root用户身份pipe理Docker
docker守护进程绑定到Unix套接字而不是TCP端口。 默认情况下,Unix套接字由用户root拥有,其他用户只能使用sudo访问它。 docker守护程序始终以root用户身份运行。
如果您不想在使用docker命令时使用sudo,请创build一个名为docker的Unix组并添加用户。 当docker守护进程启动时,它将使docker组可读写的Unix套接字的所有权。
要创builddocker组并添加您的用户:
# 1. Create the docker group. $ sudo groupadd docker # 2. Add your user to the docker group. $ sudo usermod -aG docker $USER # 3. Log out and log back in so that your group membership is re-evaluated. # 4. Verify that you can run docker commands without sudo. $ docker run hello-world
这个命令下载一个testing图像并在容器中运行。 容器运行时,会打印一条信息消息并退出。
默认情况下,docker守护进程始终以root用户身份运行,因此您需要在您的Docker命令中添加sudo
。
如果您不想在使用docker命令时使用sudo,请创build一个名为docker的Unix组并添加用户。 当docker守护进程启动时,它将使docker组可读写的Unix套接字的所有权。
要创builddocker组并添加您的用户:
-
创builddocker组。
$ sudo groupadd docker
-
将您的用户添加到泊坞窗组。
$ sudo usermod -aG docker $USER
-
注销并重新login,以便重新评估您的组成员资格。
-
validation你可以没有sudo泊坞窗命令。
$ docker run hello-world
这个命令下载一个testing图像并在容器中运行它。 容器运行时,会打印一条信息消息并退出。
上述步骤来自官方的Docker文档 。
如果你在Linux上,你可能没有安装docker-machine
因为它只在Windows和Mac电脑上默认安装。
如果是这样,你将需要: https : //docs.docker.com/machine/install-machine/find如何在你的Linux版本上安装它的说明。
安装之后,在尝试上面列出的任何东西之前,重试运行docker-compose up
。
希望这有助于某人。 这对我在Fedora 25中的devilbox安装起作用。
任何人检查日志?
在我的情况下在/var/log/upstart/docker.log
错误消息是:
Listening for HTTP on unix (/var/run/docker.sock) [graphdriver] using prior storage driver "aufs" Running modprobe bridge nf_nat failed with message: , error: exit status 1 Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0"
值得一提的是我曾经打开过VPN,所以: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start
是解决scheme。
我有相同的症状。
只有在docker-compose build
docker ps
时发生的差异才起作用。 发生2.x
版本以及3.x
重新启动docker
服务,然后机器…甚至重新安装docker
+ docker-compose
。
尝试了一切,但没有任何帮助。
最后,我尝试使用docker build来“手动”构buildDockerfile。
显然,我有一个文件/文件夹内的Docker
上下文权限问题。 正在尝试在开始构build时读取上下文,并失败并显示正确的错误消息。 然而,这个错误消息没有传播到docker-compose
,它只显示Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?
发现解决scheme是简单地将文件/文件夹添加到.dockerignore
文件,因为它不需要构build。 另一个解决scheme可能是chown
或者chmod
。
无论如何,也许这可能会帮助遇到同样的问题,真的没有任何与docker
和显示误导性的错误信息。
@srfrnk的回答为我工作。
在我的情况下,我有下一个docker-compose.yml文件:
nginx: build: context: ./ dockerfile: "./docker/nginx.staging/Dockerfile" depends_on: - scripts environment: NGINX_SERVER_NAME: "some.host" NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off" NGINX_ERROR_LOG_LEVEL: debug NGINX_BACKEND_HOST: scripts NGINX_SERVER_ROOT: /var/www/html volumes: - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw ports: - 80:80
./docker-runtime
所有者和组 – 当其他文件所有者 – 我的用户时为root
。 当我试图build立ngnix
Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
我添加./docker-runtime
到.dockerignore
,它解决了我的问题。
嗯,最简单的临时解决scheme是sudodocker – 组成..这是一个权限相关的问题,你应该添加您的用户到docker组.. .. https://docs.docker.com/engine/installation/linux/linux-postinstall/