Node.js firebase身份验证错误docker swarm中运行的docker容器中的nodejs应用程序
我正在用dockers运行我的应用程序,我的使用firebase的express服务器出现了一个奇怪的问题 基本上,当我在本地运行它时,一切正常,但一旦我让它在aws ec2实例上的docker swarm上运行,它就无法连接到firebase 我有一个模块,它初始化与firebase的连接,如下所示: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.
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
dns:8.8.8.8
我已经添加了我发现的更多信息。是的,它是暴露出来的,效果很好啊,我看到你在我打字的时候被编辑了:p。容器是否有可以卷曲的外部ip?我刚刚发现了问题以及如何解决它。我对我的问题给出了回答