2016-04-24 11 views
3

Mein docker-compose.yml ist:Docker-komponieren up nicht mit „Kann nicht einen Knoten zu finden, die die folgenden Bedingungen erfüllt“

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 

Und ich habe zwei Knoten in einem docker swarm in google. Ich habe sie mit den folgenden:

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

Und ich kann mit 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 

beide sehen und die labels gearbeitet:

$ 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 

Die docker info Ausgang

$ 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 
ist

So scheint alles richtig, oder?

Aber wenn ich versuche docker-compose up -d

Die folgende laufen passiert:

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

Dies happenning keine Rolle, was ich (ein anderes Bild versuchen, zu zerstören und die Knoten neu zu erstellen, etc.), mit Ausnahme Entfernen der "constraint:node=edge"

Was mache ich falsch?

BTW, meine Versionen sind:

$ 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

Da Ihre 'docker info' angibt, dass es 3 laufende Container gibt, würde ich vermuten, dass auf diesem Knoten bereits ein Postgrees-Container läuft. Wie sieht 'docker ps' aus? –

+0

'docker ps' geht leer zurück, die 3 Container sind die' swarm-agent' Container – nanounanue

+0

Konnten Sie das lösen? Ich habe den gleichen Fehler –

Antwort

1

Der Fehler erwähnt Port 5432.

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

So Docker nicht nach der Überprüfung, ob ein Knoten mit dem Port 5432 geöffnet ist. Sind Sie sicher, dass Postgres nicht bereits auf beiden Knoten ausgeführt wird oder ein anderer Container bereits Port 5432 überwacht?

2

können Sie versuchen, diese Zeile zu ändern:

- "constraint:node=edge" 

zu

- "constraint:node==edge" 
1

Können Sie die alten Behälter mit Docker-compose rm zerstören, bevor die neue zu schaffen.

+0

Dies ist wirklich ein Kommentar, keine Antwort. Mit ein wenig mehr Rep, [Sie können Kommentare posten] (// stackoverflow.com/privileges/comment). – manetsus