我在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
无法连接到http + unix://var/run/docker.sock上的Docker守护程序 - 它正在运行吗?
如果它位于非标准位置,请使用DOCKER_HOST环境变量指定URL。
我的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
与守护程序通信(如错误消息中所示)。
使用eval $(docker-machine env dev)
导出正确的环境变量,然后重试。您也可以运行docker-machine env dev
来查看它将导出的环境变量。请注意,其中一个是DOCKER_HOST
,就像错误消息暗示您可能需要设置一样。
我有同样的症状。
只有在
$ sudo service openvpn stop
$ sudo service docker restart
$ docker-compose up|start
$ sudo service openvpn start
docker-compose build
工作时才发生的差异。发生了版本docker ps
以及2.x
。重新启动3.x
服务,然后机器...甚至重新安装docker
+ docker
。
尝试了一切,但没有任何帮助。
最后,我尝试使用docker-compose
“手动”构建Dockerfile。
显然我在docker build
上下文中的文件/文件夹上有权限问题。它正在尝试在启动构建时读取上下文,并且失败并显示正确的错误消息。但是,此错误消息未传播到仅显示Docker
的docker-compose
发现解决方案只是将文件/文件夹添加到Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?
文件中,因为构建不需要它。另一个解决方案可能是.dockerignore
或chown
。
无论如何,这可能会帮助遇到与chmod
无关的同一问题的人和显示的误导性错误消息。
对我来说,我开始升级Docker并在中途取消。我没有注意到Docker没有运行(如果是的话,我的Macbook顶部导航栏上有一个图标,电池剩余,时间等)。一旦我启动它并完成升级,docker
再次工作!
$ sudo docker-compose up
我确实按照上面的答案中的步骤将$ USER添加到组docker。我不想添加新的组码头,因为在我的docker安装中,自动创建了一个名为docker的组。
docker-compose up
但是使用docker-compose也不起作用。它给出了同样的错误。所以在我的情况下(Ubuntu 18.10)sudo docker-compose up修复了这个问题。
ps:@Tiw感谢您的建议。
试试这个:
sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose
在运行docker-compose pull时 - 我遇到错误错误ERROR:无法连接到http + docker:// localhost的Docker守护程序 - 它正在运行吗?
解决方案 - sudo服务码头启动
问题解决了
对我来说简单的解决方案:sudo docker-compose up
更新2016-3-14:在docker安装过程(或docker-compose?)的某个时刻,有一个建议和示例将您的用户名添加到“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的第二次安装),您将找到必要的步骤。它也记录在这里:https://subosito.com/posts/docker-tips/
须藤?不!
厌倦了每次发出命令时输入sudo docker?是的,有办法解决这个问题。虽然自然docker需要root用户,但我们可以为docker操作提供root等效组。
您可以创建一个名为docker的组,然后将所需用户添加到该组。重新启动docker服务后,用户无需在每次执行docker操作时键入sudo。 shell命令的外观如何?作为根,你走了:
> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart
完成!
本节包含配置Linux主机以使用Docker更好地工作的可选过程。
以非root用户身份管理Docker
docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户root拥有,而其他用户只能使用sudo访问它。 docker守护程序始终以root用户身份运行。
如果您在使用docker命令时不想使用sudo,请创建一个名为docker的Unix组并向其添加用户。当docker守护程序启动时,它会使docker组对Unix套接字的所有权进行读/写。
要创建docker组并添加您的用户:
# 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
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。
如果你使用sudo
开始使用docker,那么你应该运行docker-compose up with sudo
Like:sudo docker-compose up
默认情况下,docker守护程序始终以root用户身份运行,因此您需要将sudo
添加到Docker命令中。
如果您在使用docker命令时不想使用sudo,请创建一个名为docker的Unix组并向其添加用户。当docker守护程序启动时,它会使docker组对Unix套接字的所有权进行读/写。
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。
上面列出的步骤来自official Docker documentation。
sudo systemctl start docker
- 启动Docker服务。
之后的sudo docker-compose up
。
我有Fedora 26,并试图解决同样的问题,我最终进入Docker Compose on Fedora Developers' page然后Docker on Fedora Developers' page,这帮助了我。
也许,社区认为docker服务从系统开始并一直在后台运行,但对我来说这并不是那么明显,这就是我能想到为什么没有像这样的流行答案的原因。
在Fedora Developers' page上有说明如何启用Docker以启动系统:
sudo systemctl enable docker
如果您使用的是Linux,则可能没有安装docker-machine
,因为它仅在Windows和Mac计算机上默认安装。
如果是这样,您将需要访问:qazxsw poi以查找有关如何在您的Linux版本上安装它的说明。
安装完成后,在尝试上面列出的任何内容之前重试运行https://docs.docker.com/machine/install-machine/。
希望这有助于某人。这适用于我在Fedora 25中的devilbox安装。
如果您使用的是docker-machine,那么您必须使用env变量激活环境。如果你没有使用docker-machine,那么用sudo运行你的命令
来自@srfrnk的回答对我有用。
在我的情况下,我有下一个docker-compose.yml文件:
docker-compose up
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
nginx
我将Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
添加到./docker-runtime
,它解决了我的问题。
有谁检查过日志?
在我的情况下,.dockerignore
中的错误消息是:
/var/log/upstart/docker.log
值得一提的是我打开了vpn,所以: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"
就是解决方案。