Postgresql Postgres不接受Docker中的连接
我正在docker toolbox windows 7 sp1上运行docker项目,该项目没有给出任何错误,但仍然是因为postgres没有在不正常的情况下运行整个项目。 Docker compose文件的代码为:Postgresql Postgres不接受Docker中的连接,postgresql,docker,docker-compose,dockerfile,Postgresql,Docker,Docker Compose,Dockerfile,我正在docker toolbox windows 7 sp1上运行docker项目,该项目没有给出任何错误,但仍然是因为postgres没有在不正常的情况下运行整个项目。 Docker compose文件的代码为: version: '3' services: postgres: image: 'postgres:latest' restart: always ports: - "5432:5432" environment: PO
version: '3'
services:
postgres:
image: 'postgres:latest'
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_DB: "db"
POSTGRES_PASSWORD: postgres_password
POSTGRES_HOST_AUTH_METHOD: "trust"
DATABASE_URL: postgresql://postgres:p3wrd@postgres:5432/postgres
deploy:
restart_policy:
condition: on-failure
window: 15m
redis:
image: 'redis:latest'
nginx:
restart: always
build:
dockerfile: Dockerfile.dev
context: ./nginx
ports:
- '3050:80'
api:
depends_on:
- "postgres"
build:
dockerfile: Dockerfile.dev
context: ./server
volumes:
- ./server/copy:/usr/src/app/data
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- PGUSER=postgres
- PGHOST=postgres
- PGDATABASE=postgres
- PGPASSWORD=postgres_password
- PGPORT=5432
client:
depends_on:
- "postgres"
build:
dockerfile: Dockerfile.dev
context: ./client
volumes:
- ./client/copy:/usr/src/app/data
- /usr/src/app/node_modules
worker:
build:
dockerfile: Dockerfile.dev
context: ./worker
volumes:
- ./worker/copy:/usr/src/app/data
- /usr/src/app/node_modules
depends_on:
- "postgres"
但当我运行该项目时,我得到以下信息:
redis_1 | 1:C 29 May 2020 05:07:37.909 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 29 May 2020 05:07:37.910 # Redis version=6.0.3, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 29 May 2020 05:07:37.911 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 29 May 2020 05:07:37.922 * Running mode=standalone, port=6379.
redis_1 | 1:M 29 May 2020 05:07:37.928 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 29 May 2020 05:07:37.929 # Server initialized
redis_1 | 1:M 29 May 2020 05:07:37.929 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1 | 1:M 29 May 2020 05:07:37.933 * Loading RDB produced by version 6.0.3
redis_1 | 1:M 29 May 2020 05:07:37.934 * RDB age 8 seconds
redis_1 | 1:M 29 May 2020 05:07:37.934 * RDB memory usage when created 0.81 Mb
redis_1 | 1:M 29 May 2020 05:07:37.934 * DB loaded from disk: 0.001 seconds
postgres_1 |
postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1 |
postgres_1 | 2020-05-29 05:07:38.927 UTC [1] LOG: starting PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
postgres_1 | 2020-05-29 05:07:38.928 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2020-05-29 05:07:38.929 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres_1 | 2020-05-29 05:07:38.933 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2020-05-29 05:07:38.993 UTC [24] LOG: database system was shut down at 2020-05-29 05:07:29 UTC
api_1 |
api_1 | > @ dev /usr/src/app
api_1 | > nodemon
api_1 |
api_1 | [nodemon] 1.18.3
api_1 | [nodemon] to restart at any time, enter `rs`
api_1 | [nodemon] watching: *.*
无论是否有数据卷,都会出现相同的错误,因此项目无法运行。请帮助我假设一旦API启动,它就会尝试连接到Postgres。如果是,这是许多Docker开发人员遇到的典型错误,Postgres DB尚未准备好接受连接,应用程序正在尝试连接到它 您可以通过尝试以下任一方法来解决此问题:
如果这不起作用,我建议您检查容器外部是否安装了Postgres DB,该容器拥有您试图访问的端口。除了Allan Chua的回答,请在docker compose文件中提及对Postgres服务的启动依赖性
depends_on:
- postgres
将此添加到您的
api
服务中。您好,我是docker的新手,请告诉我如何使api层等待,我应该将此线程放置在何处。请执行此操作。api确实尝试连接到postgress@DeepeshAcharya在节点应用程序连接到数据库的位置,延迟执行失败重试循环。我已经编辑了问题中的docker compose文件,但它仍然不起作用。这也是一个重要的问题。值得注意的是,这不会等待数据库完全初始化,而只是指定一个启动顺序。一个完整的解决方案将同时使用依赖和重试。
depends_on:
- postgres