gpt4 book ai didi

javascript - PostgreSQL docker-compose down 后使用的端口不能再使用

转载 作者:行者123 更新时间:2023-11-29 14:30:02 26 4
gpt4 key购买 nike

我正在处理一个项目,该项目使用 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 down 之前的端口

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 down 并查看端口后,它的所有端口都是干净的,没有留下任何打开的端口

当我使用 docker-compose up 时,我发现了一些非常有趣的东西,如果我使用 ctr + c 并再次使用 compose up 它总是有效,当我重新启动 docker 时它仍然有效,但是一旦我使用 docker-compose向下 显示错误。我尝试通过重新启动我的 docker 和 ctr + c 以及 compose-up 进行 man 组合一切正常,但只要我使用 docker-compose down 它就开始工作,这是为什么?

最佳答案

很可能数据库还没有

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

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

另一种解决方案是为数据库容器使用卷挂载。

关于javascript - PostgreSQL docker-compose down 后使用的端口不能再使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com