我在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连接到Docker守护进程。袜子——它在跑吗? 如果它位于非标准位置,则使用DOCKER_HOST环境变量指定URL。

我的Dockerfile和docker-compose。Yml在这里。

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

docker-compose.yml

web:
  build: .

为什么不能连接?什么好主意吗?


当前回答

对我来说简单的解决方案: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吗?不! 厌倦了每次发出命令时键入sudo docker ?是的,有 是一种解决问题的方法。虽然自然docker是需要一个 Root用户,我们可以为docker操作提供一个与Root相当的组。 您可以创建一个名为docker的组,然后向其中添加所需的用户 组。重启docker服务后,用户不再需要输入 Sudo每次都做docker操作。它在壳上是什么样子 命令吗?作为根,你可以这样做:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

完成了!

更新2017-3-9

Docker安装说明已在此更新。

Linux的安装后步骤

本节包含配置Linux主机以更好地使用Docker的可选过程。

以非root用户管理Docker

docker守护进程绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由root用户拥有,其他用户只能使用sudo访问它。docker守护进程总是以根用户运行。

如果在使用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

这个命令下载一个测试映像,并在容器中运行它。当容器运行时,它打印一条信息消息并退出。

其他回答

如果你使用的是Linux系统,你可能没有安装docker-machine,因为它只在Windows和Mac电脑上默认安装。

如果是这样,你需要去https://docs.docker.com/machine/install-machine/找到如何在你的Linux版本上安装它的说明。

安装后,在尝试上面列出的任何操作之前,请重试运行docker-compose up。

希望这能帮助到一些人。这适用于我在Fedora 25中的devilbox安装。

试试这个:

Sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

以下是对我有用的,我不确定是哪一部分起作用了:

julian:project$ sudo service docker status
julian:varys$ sudo service docker status                                                                                                                                                                                
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

julian:project$ sudo service docker restart  
1 . sudo service docker stop 
2 . sudo service docker status
3 . sudo service docker start
4 . docker-compose build <app_name\service_name>

Docker机器正在运行。但是您需要导出一些环境来连接到Docker机器。默认情况下,docker命令行客户端试图使用http+unix://var/run/docker与守护进程通信。Sock(如错误消息中所示)。

使用eval $(docker-machine env dev)导出正确的环境变量,然后再试一次。你也可以运行docker-machine env dev来查看它将导出的环境变量。注意,其中一个是DOCKER_HOST,正如错误消息建议您可能需要设置的那样。