Node.js firebase身份验证错误docker swarm中运行的docker容器中的nodejs应用程序

Node.js firebase身份验证错误docker swarm中运行的docker容器中的nodejs应用程序,node.js,firebase,docker,Node.js,Firebase,Docker,我正在用dockers运行我的应用程序,我的使用firebase的express服务器出现了一个奇怪的问题 基本上,当我在本地运行它时,一切正常,但一旦我让它在aws ec2实例上的docker swarm上运行,它就无法连接到firebase 我有一个模块,它初始化与firebase的连接,如下所示: const admin = require('firebase-admin') admin.initializeApp({ credential: admin.credential.

我正在用dockers运行我的应用程序,我的使用firebase的express服务器出现了一个奇怪的问题

基本上,当我在本地运行它时,一切正常,但一旦我让它在aws ec2实例上的docker swarm上运行,它就无法连接到firebase

我有一个模块,它初始化与firebase的连接,如下所示:

const admin = require('firebase-admin')


admin.initializeApp({
    credential: admin.credential.cert({
        client_email: process.env.FB_CLIENT_MAIL,
        project_id: process.env.FB_PROJECT_ID,
        private_key: process.env.FB_PRIVATE_KEY.replace(/\\n/g, '\n'),
    }),
    databaseURL: process.env.FB_URL,
})

我需要它在我的每项服务上连接到firebase。 唯一有错误的服务是承载应用程序REST api的服务

它运行express并在docker compose文件中的8080端口上公开服务。 在swarm上运行堆栈时,出现以下错误:

@firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo EAI_AGAIN accounts.google.com:443. Error code: EAI_AGAIN\"."}
我读了一些关于时钟同步的类似问题的文章。但是我的服务器和dockers是同步的

我的其他服务也连接到firebase,它们工作正常

我发现了更多的事情:

当我运行:
docker exec-it
并从中运行服务器时,它工作正常


不知怎的,暴露的端口破坏了它

看起来docker容器存在DNS问题,不知何故,暴露的端口使其无法ping
google.com

“不知何故,暴露的端口破坏了它”


这听起来像是防火墙问题。您是否已将云提供商防火墙配置为允许连接到此端口?

因此我发现我的容器没有正确解析dns

我在网上搜索过其他人是否有类似的问题,我发现了这个帖子

基本上,我找到了以下解决方案:

一,

我通过在中添加这个{“dns”:[“8.8.8.8”,“8.8.4.4”]}来修复它 /etc/docker/daemon.json

  • 另一种可能是将其添加到docker compose文件中


  • dns:8.8.8.8

    我已经添加了我发现的更多信息。是的,它是暴露出来的,效果很好啊,我看到你在我打字的时候被编辑了:p。容器是否有可以卷曲的外部ip?我刚刚发现了问题以及如何解决它。我对我的问题给出了回答