Docker-compose:ECONNREFUSED的Postgresql

jy95

今天,我尝试对完整的应用程序(前端,API和数据库)进行泊坞化,以便可以将其部署在本地计算机或虚拟机上。

进行时:

docker-compose up

当我尝试使用以下env变量启动将连接到数据库的API(它在后台使用Sequelize)时,我得到了“ Connect ECONNREFUSED”:

DATABASE_URL: "postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-jy95}@db:5432/${POSTGRES_DB:-sourcecode}"

docker docs中,据说:

现在,每个容器都可以查找主机名web或db,并取回相应容器的IP地址。例如,Web的应用程序代码可以连接到URL postgres:// db:5432并开始使用Postgres数据库。

PostgreSQL文档中,我们可以看到postgresql://也是有效的:

The URI scheme designator can be either postgresql:// or postgres://. Each of the URI parts is optional.

这是我完整的docker-compose.yml文件:

version: '3.7'
services:
  frontend:
    image: jy95/sourcecode-front
    restart: always
    depends_on:
      - api
    ports:
      - "80:3000"
      - "443:3000"
    environment:
      API_SERVER: "api:8080"
      CDN_SERVER: "api:8080/files"
  api:
    image: jy95/sourcecode_api
    restart: always
    ports:
      - "8080:3000"
    depends_on:
      - db
    environment:
      DATABASE_URL: "postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-jy95}@db:5432/${POSTGRES_DB:-sourcecode}"
      # use a env file if you want to use other values that default ones
      # https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option
  db:
    image: postgres:12-alpine
    restart: always
    ports:
      - "5432:5432"
    environment:
      # use a env file for that part later
      # https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: jy95
      POSTGRES_DB: sourcecode
      POSTGRES_PORT: 5432
      # If we want to access more easily to the database (not recommended)
      # PGDATA: /var/lib/postgresql/data/pg_data
    #volumes:
    #  - pg_data:/var/lib/postgresql/data/pg_data

先谢谢您的帮助

PS:图像已经在Docker Hub上

NoNamedDev

您的评论实际上是一个很大的线索:“这是我使用的命令(如我所见,我使用“ depends_on”来确保在API之前需要数据库)。错误是:SequelizeConnectionRefusedError:connect ECONNREFUSED 127.0.0.1: 5432我不明白:码头工人文档不是最新的吗?”

看来您的api容器正在尝试向localhost而非db:5432射击(正如您所指出的,db是DNS名称,不太可能解析为127.0.0.1(IP保留给localhost)

快速调试:运行:docker exec -it sh(在容器中)apk添加busybox-extras,然后:telnet 127.0.0.1 5432->您将看到这是无法访问的,但是telnet db 5432->这很好,而且您还可以可以运行nslookup db->因为我们已经建立了这个dns名称(db),所以应该可以解析它

我试图将network_mode:host添加到api(在docker-compose.yml中),但这会导致您的应用崩溃。此时,我建议您检查一下api的代码,并查找对127.0.0.1:5432的任何引用。如果您运行docker exec -it sh然后运行:printenv您将看到DB_URL环境变量设置为:postgresql:// postgres:jy95 @ db:5432 / sourcecode,但是您确定该ENV-VAR被api使用吗?(也许您已通过示例注释了一些代码,但仍在使用其他连接字符串)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:连接ECONNREFUSED 127.0.0.1:5432 docker-compose up

来自分类Dev

使用docker-compose启用Postgresql登录

来自分类Dev

Docker-compose postgresql 密码认证失败

来自分类Dev

猫鼬服务器选择错误ECONNREFUSED与docker-compose

来自分类Dev

尝试使用docker-compose通过节点连接到Redis时ECONNREFUSED

来自分类Dev

docker 在 docker 中 docker compose

来自分类Dev

flask无法将PostgreSQL与docker-compose连接

来自分类Dev

docker-compose下来不保留PostgreSQL数据

来自分类Dev

Swift Vapor 3 + PostgreSQL + Docker-Compose正确的配置?

来自分类Dev

Docker compose 无法为 postgresql 和 redis 创建容器

来自分类Dev

Docker容器'Connect ECONNREFUSED localhost'

来自分类Dev

docker-compose postgresql docker-entrypoint-initdb.sh无法正常工作

来自分类Dev

干docker-compose

来自分类Dev

Docker Compose JVM参数

来自分类Dev

Docker-Compose文件

来自分类Dev

Docker-compose异常

来自分类Dev

SonarQube与docker-compose

来自分类Dev

Docker Compose Wordpress示例

来自分类Dev

docker compose 无法构建

来自分类Dev

带有PostJS的Docker上的Postgres ECONNREFUSED

来自分类Dev

ECONNREFUSED在Docker容器内部;访问远程API

来自分类Dev

Docker Compose和Rabbitmq Docker映像插件

来自分类Dev

Docker:Dockerfile与docker-compose.yml

来自分类Dev

Docker / Docker-Compose中的NFS卷

来自分类Dev

使用Docker / Docker compose运行Postgres迁移

来自分类Dev

限制全球docker(或docker-compose)资源

来自分类Dev

Docker-compose和Docker-swarm

来自分类Dev

Docker:Dockerfile与docker-compose.yml

来自分类Dev

Docker --add-host 和 Docker compose