【发布时间】:2016-04-24 04:52:20
【问题描述】:
我的docker-compose.yml 是:
version: '2'
services:
db:
build: ./postgres
ports:
- "5432:5432"
volumes:
- postgres-data:/data
env_file: .env
environment:
- "constraint:node=edge"
networks:
- back-tier
volumes:
postgres-data:
driver: local
networks:
back-tier:
driver: overlay
我在docker swarm 和google 中有两个节点。我使用以下内容创建了它们:
## Swarm master
docker-machine --debug create --driver google --google-project my_project --swarm --swarm-discovery="consul://$cip:8500" --engine-opt="cluster-store=consul://$cip:8500" --engine-opt="cluster-advertise=eth0:2376" --swarm-master --engine-label node=director --google-disk-size 100 --google-machine-type n1-standard-2 director
## Nodo edge
docker-machine --debug create --driver google --google-project my_project --swarm --swarm-discovery="consul://$cip:8500" --engine-opt="cluster-store=consul://$cip:8500" --engine-opt="cluster-advertise=eth0:2376" --engine-label node=edge --google-scopes https://www.googleapis.com/auth/devstorage.read_write --google-disk-size 250 --google-machine-type n1-standard-4 node-0
我可以通过docker-machine ls看到他们两个
consul - google Running tcp://X.X.X.X:2376 v1.11.0
director * (swarm) google Running tcp://X.X.X.X:2376 director (master) v1.11.0
node-0 - google Running tcp://X.X.X.X:2376 director v1.11.0
labels 起作用了:
$ docker-machine ls --filter label=node=edge
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
node-0 - google Running tcp://X.X.X.X:2376 v1.11.0
docker info 输出是
$ docker info
Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 4
Server Version: swarm/1.2.0
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
director: 104.154.88.186:2376
└ Status: Healthy
└ Containers: 2
└ Reserved CPUs: 0 / 2
└ Reserved Memory: 0 B / 7.67 GiB
└ Labels: executiondriver=, kernelversion=4.2.0-18-generic, node=director, operatingsystem=Ubuntu 15.10, provider=google, storagedriver=aufs
└ Error: (none)
└ UpdatedAt: 2016-04-24T04:43:50Z
└ ServerVersion: 1.11.0
node-0: 104.197.85.59:2376
└ Status: Healthy
└ Containers: 1
└ Reserved CPUs: 0 / 4
└ Reserved Memory: 0 B / 15.42 GiB
└ Labels: executiondriver=, kernelversion=4.2.0-18-generic, node=edge, operatingsystem=Ubuntu 15.10, provider=google, storagedriver=aufs
└ Error: (none)
└ UpdatedAt: 2016-04-24T04:43:41Z
└ ServerVersion: 1.11.0
Plugins:
Volume:
Network:
Kernel Version: 4.2.0-18-generic
Operating System: linux
Architecture: amd64
CPUs: 6
Total Memory: 23.09 GiB
Name: director
Docker Root Dir:
Debug mode (client): false
Debug mode (server): false
WARNING: No kernel memory limit support
所以一切看起来都不错,对吧?
但是当我尝试运行docker-compose up -d
会发生以下情况:
$ docker-compose up -d
Creating network "infraestructura_back-tier" with driver "overlay"
Creating volume "infraestructura_postgres-data" with local driver
Building db
Step 1 : FROM postgres:9.5
---> 0f3af79d8673
Step 2 : ADD create_tables.sql /docker-entrypoint-initdb.d
---> Using cache
---> 2f818eec1228
Successfully built 2f818eec1228
WARNING: Image for service db was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating infraestructura_db_1
ERROR: for db Unable to find a node that satisfies the following conditions
[port 5432 (Bridge mode)]
无论我做什么(尝试另一个图像,销毁和重新创建节点等)都会发生这种情况,除了删除"constraint:node=edge"
我做错了什么?
顺便说一句,我的版本是:
$ docker version
Client:
Version: 1.11.0
API version: 1.23
Go version: go1.5.4
Git commit: 4dc5990
Built: Wed Apr 13 18:38:59 2016
OS/Arch: linux/amd64
Server:
Version: swarm/1.2.0
API version: 1.22
Go version: go1.5.4
Git commit: a6c1f14
Built: Wed Apr 13 05:58:31 UTC 2016
OS/Arch: linux/amd64
$ docker-machine -v
docker-machine version 0.6.0, build e27fb87
$ docker-compose -v
docker-compose version 1.7.0, build 0d7bf73
$ docker run --rm swarm -version
swarm version 1.2.0 (a6c1f14)
【问题讨论】:
-
正如您的
docker info所说,有 3 个正在运行的容器,我猜想该节点上已经有一个正在运行的 postgres 容器。docker ps长什么样子? -
docker ps返回空,这 3 个容器是swarm-agent容器 -
你能解决这个问题吗?我面临同样的错误
标签: docker docker-compose docker-machine docker-swarm