当前位置: 首页 > 面试题库 >

ECONNREFUSED用于带有docker的nodeJS上的Postgres

毕浩渺
2023-03-14
问题内容

我正在构建一个使用postgresql在NodeJS上运行的应用程序。我正在将SequelizeJS用作ORM。为了避免使用真正的postgres守护程序并在自己的设备上安装nodejs,我使用了带有docker-
compose的容器。

当我运行docker-compose up 它启动pg数据库

database system is ready to accept connections

和nodejs服务器。但服务器无法连接到数据库。

Error: connect ECONNREFUSED 127.0.01:5432

如果我尝试在不使用容器的情况下运行服务器(在我的计算机上使用真正的nodejs和postgresd),它将正常工作。

但我希望它能与容器正常工作。我不明白我在做什么错。

这是docker-compose.yml文件

web:
  image: node
  command: npm start
  ports:
    - "8000:4242"
  links:
    - db
  working_dir: /src
  environment:
    SEQ_DB: mydatabase
    SEQ_USER: username
    SEQ_PW: pgpassword
    PORT: 4242
    DATABASE_URL: postgres://username:pgpassword@127.0.0.1:5432/mydatabase
  volumes:
    - ./:/src
db:
  image: postgres
  ports:
  - "5432:5432"
  environment:
    POSTGRES_USER: username
    POSTGRES_PASSWORD: pgpassword

有人可以帮我吗?

(喜欢docker的人:))


问题答案:

DATABASE_URL所指的127.0.0.1是回送适配器(更多信息请参见)。这意味着“连接到我自己”。

在同一主机上运行两个应用程序(不使用Docker)时,它们都可以在同一适配器(也称为localhost)上寻址。

在容器中运行两个应用程序时,它们与以前不在本地主机上。相反,您需要将web容器指向适配器db上容器的IP地址docker0- docker- compose为您设置。

更改:

DATABASE_URL: postgres://username:pgpassword@127.0.0.1:5432/mydatabase

DATABASE_URL: postgres://username:pgpassword@db:5432/mydatabase

多亏了Docker链接,该方法才能起作用:该web容器具有一个文件(/etc/hosts),其中的db条目指向该db容器所在的IP
。这是系统(在本例中为容器)在尝试解析主机名时首先会看到的位置。



 类似资料:
  • 问题内容: 我正在构建一个在docker容器中运行的nodejs应用… 这是我用来运行容器的命令… 在命令行上方执行,得到以下输出。 由于该应用将调用第三方api,因此请求模块是必需的。每次调用请求时,都会出现以下错误… 我知道也许是因为localhost条目,但是如何更改呢? 问题答案: 您是否将第三方api托管在localhost上的docker容器中?如果是,那么您需要确保第三方api do

  • 我正在构建一个在docker容器中运行的nodejs应用程序…… 这是我用来运行容器的命令。。。 执行上面的命令行,得到以下输出… 由于应用程序将调用第三方api,所以请求模块是必需的。每次调用请求时,我都会得到以下错误... 我知道这可能是因为本地主机条目,但我如何改变这一点?

  • 在这些日子里,我正在尝试部署我的Spring Boot OAuth2项目。它有3个不同的模块。(身份验证服务器,资源服务器和前端)身份验证和资源服务器有自己的*.yml文件配置,如mongodb名称-端口,服务器配置文件-IP等。我正在尝试做什么?我想在docker上部署Spring Boot应用程序,但我不想把我的数据库(mongodb)作为容器放在docker上。我不确定这种结构是否可行?因为

  • 本文向大家介绍基于 Docker 开发 NodeJS 应用,包括了基于 Docker 开发 NodeJS 应用的使用技巧和注意事项,需要的朋友参考一下 有关这个 Node 应用 此应用包含一个 package.json, server.js 以及一个 .gitignore 文件, 它们简单到可以信手拈来. .gitignore package.json server.js server.js 会拉

  • 我是NodeJS的新手,我正试图从express和express-generator开始。我已经使用以下命令安装了express: 然后我安装了快速生成器模块: 然后,我为项目创建一个文件夹并安装解除依赖项: 那里一切正常,但当我尝试使用以下命令启动服务器时,问题就出现了: 好像服务启动了但是一启动就关闭了,结果: 当我尝试打开localhost:3000它不起作用。我在网上搜索,我还没有找到解决

  • 问题内容: 我需要从Docker容器中在后台运行的Java应用程序中启动Selenium。启动失败,因为在运行时无法访问X11环境。请参阅下面的内容。 我该怎么办? 问题 我从安装Java 8和Jetty 9.3.x 的简单程序开始运行一个简单的服务(实际上是selenium的东西)。该服务实际上是为了启动一些需要UI才能执行的事情而设置的。我遇到的问题是其中的任何内容执行失败,因为UI在我运行的