2016-04-24 21 views
3

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 

而且我在google一個docker swarm兩個節點。我創造了他們具有以下:

## 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)] 

這happenning不是無論我做什麼(嘗試其他的形象,破壞並重新創建節點等),除刪除"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) 
+0

由於您的docker info說有3個正在運行的容器,所以我猜測那個節點上已經有一個正在運行的postgres容器。 docker ps是什麼樣的? –

+0

'docker ps'返回空,3個容器是'swarm-agent'容器 – nanounanue

+0

你能解決這個問題嗎?我面臨同樣的錯誤 –

回答

1

的錯誤中提到端口5432

ERROR: for db Unable to find a node that satisfies the following conditions 
[port 5432 (Bridge mode)] 

因此,在檢查是否存在打開端口5432的節點後,Docker會失敗。 您確定Postgres尚未在兩個節點上運行,或者某個其他容器已在端口5432上偵聽?

2

您可以嘗試更改此行:

- "constraint:node=edge" 

- "constraint:node==edge" 
1

您可以在創建新對象之前銷燬舊集裝箱,碼頭工人,撰寫RM。

+0

這實在是一個評論,而不是一個答案。有了更多的代表,[你將能夠發表評論](// stackoverflow.com/privileges/comment)。 – manetsus