PostgreSQL在docker-compose下来之后,使用的端口无法再次使用

时间:2018-11-09 22:09:12

标签: javascript postgresql express docker docker-compose

我正在处理一个项目,该项目使用express作为服务器,并使用postgres作为数据库来学习docker。 服务器取决于要启动的数据库。 我第一次使用docker-compose up时一切正常,但是当我重新启动它时 (docker-compose down和docker-compose up),它表示端口出了问题

version: '3'
services:
  db:
    image: postgres:10
    ports:
      - "5433:5432"
    environment:
      POSTGRES_USER: 'Donald'
      POSTGRES_PASSWORD: 'Aa123456'
      POSTGRES_DB: 'twitter'

  backend:
    build: twitter
    ports: 
      - "3000:3000"
    depends_on: 
      - db
    environment:
      PGHOST: "db"
      PGPORT: '5432'
      PGDATABASE: 'twitter'
      PGUSER: 'Donald'
      PGPASSWORD: 'Aa123456'

错误

{ Error: connect ECONNREFUSED 172.19.0.2:5432
backend_1  |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
backend_1  |   errno: 'ECONNREFUSED',
backend_1  |   code: 'ECONNREFUSED',
backend_1  |   syscall: 'connect',
backend_1  |   address: '172.19.0.2',
backend_1  |   port: 5432 }

在docker-compose之前端口

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b000b9a02257        excer_backend       "node server"            5 minutes ago       Up 3 minutes        0.0.0.0:3000->3000/tcp   excer_backend_1
40ca65adcc46        postgres:10         "docker-entrypoint.s…"   5 minutes ago       Up 3 minutes        0.0.0.0:5433->5432/tcp   excer_db_1

在我使用docker-compose下来并查看所有干净的端口之后,没有剩余的开放端口

当我使用docker-compose up时,我发现了一个非常有趣的东西,如果我使用ctr + c并再次使用compose up,它在重新启动docker时仍然可以正常工作,但是当我使用 docker-compose时,它仍然可以正常工作下显示错误。 我尝试了重新启动docker和ctr + c并组合的人组合 一切正常,但是一旦我使用docker-compose降低了剂量,为什么会这样?

1 个答案:

答案 0 :(得分:2)

数据库很可能还没有运行

当您执行docker-compose down时,它将删除该容器,并且由于您没有使用卷来保持持久性,因此数据库必须再次执行其初始化过程,这将花费几秒钟的时间(因此当您ctrl+cdocker-compose up)。

请注意,depends_on不会等到数据库启动。您必须在后端容器中使用类似wait-on的东西。

另一种解决方案是对DB容器使用卷挂载。