docker-compose up失败了"无法找到满足以下条件的节点"

时间:2016-04-24 04:52:20

标签: docker docker-compose docker-machine docker-swarm

我的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的{​​{1}}中有两个节点。我用以下内容创建了它们:

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"

3 个答案:

答案 0 :(得分:2)

您可以尝试更改此行:

- "constraint:node=edge"

- "constraint:node==edge"

答案 1 :(得分:1)

错误提及端口5432

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

所以Docker在检查是否有打开端口5432的节点后失败。 你确定Postgres还没有在两个节点上运行,或者其他一些容器已经在端口5432上监听了吗?

答案 2 :(得分:1)

在创建新容器之前,你能用docker-compose rm销毁旧容器。