我在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: .
为什么不能连接?什么好主意吗?
默认情况下,docker守护进程总是以root用户运行,因此你需要在docker命令前加上sudo。
如果在使用docker命令时不想使用sudo,可以创建一个名为docker的Unix组并向其添加用户。当docker守护进程启动时,它使docker组可以读/写Unix套接字的所有权。
创建docker组并添加用户:
创建docker组。
$ sudo groupadd docker
将您的用户添加到docker组。
$ sudo usermod -aG docker $USER
登出并重新登录,以便重新评估组成员资格。
验证您可以在没有sudo的情况下使用docker命令。
$ docker run hello-world
这个命令下载一个测试映像,并在容器中运行它。当容器运行时,它打印一条信息消息并退出。
上面列出的步骤来自Docker官方文档。
有人查过日志吗?
在我的例子中,/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 |start
$ sudo service openvpn start
这就是解决办法。