【问题标题】:docker-compose up fails with " Unable to find a node that satisfies the following conditions "docker-compose up 失败并显示“无法找到满足以下条件的节点”
【发布时间】: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 swarmgoogle 中有两个节点。我使用以下内容创建了它们:

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


【解决方案1】:

您可以尝试更改此行:

- "constraint:node=edge"

- "constraint:node==edge"

【讨论】:

    【解决方案2】:

    错误提到端口5432

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

    所以 Docker 在检查是否有一个 5432 端口打开的节点后失败。 您确定 Postgres 尚未在两个节点上运行,或者某些其他容器已在侦听端口 5432?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2021-04-26
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2018-12-18
      • 2020-07-05
      相关资源
      最近更新 更多