4

我正在使用NodeJsFirebase Tools for a Local Development Environment构建Docker映像。由于我处于非交互模式,因此我使用了

firebase login:ci --interactive 

在我的 Dockerfile 上运行此命令时,它可以很好地检索我一个令牌,但是当我登录我的 Google 帐户后转到浏览器时Localhost:9005似乎不起作用

无法访问此站点 localhost 拒绝连接。在 Google 上搜索 localhost 9005 ERR_CONNECTION_REFUSED

我也试过

firebase login --no-localhost

但控制台一直让我使用 login:ci

错误:无法在非交互模式下运行登录。请参阅 login:ci 以生成用于非交互式环境的令牌。

简而言之,我只需要允许 Firebase进入我的环境。firebase login --no-localhost不会工作(我已经尝试过,正如其他线程中提到的那样)

这是我的Dockerfile

FROM node:carbon
USER    root
RUN     apt-get update && apt-get upgrade -y

# set user to avoid permission issues
# (see https://github.com/nodejs/node-gyp/issues/1236)
USER    node

RUN     mkdir /home/node/.npm-global
ENV     PATH=/home/node/.npm-global/bin:$PATH
ENV     NPM_CONFIG_PREFIX=/home/node/.npm-global

RUN     npm install -g firebase-tools

# Logging in to Firebase
# RUN     firebase login --no-localhost
RUN     firebase login:ci --interactive

# Initialising Firebase Project
RUN     firebase init hosting \
&&  firebase init functions \
&&  cd functions/ \
&&  npm i express --save \
&&  cd .. \
&&  ls

检查一些截图:

链接到图片 - #1 步骤

链接到图片 - #2 步骤

链接到图片 - #3 步骤

4

2 回答 2

5

我建议您将 firebase 登录步骤移至运行时。运行时,我的意思是当 Docker 容器运行时。

因此,您的 Dockerfile 应该具有的唯一 FCM 相关命令是:

RUN npm install -g firebase-tools

然后,在运行容器时,将容器中的端口 9005 映射到主机上的同一端口,如下所示:

docker run \
    -i -t \
    ...
    -p 9005:9005 \

注意这是假设重定向端口固定为9005

然后您可以在容器中运行其他命令(使用docker exec):

firebase login
firebase init functions
...

PS我相信生产环境会有更好的方法,因为我的回答只适用于本地开发)

于 2018-04-18T20:39:15.280 回答
0

老问题,但对于任何尝试登录而不与终端交互的人(例如,在 Dockerizing 模拟器时),您可以使用FIREBASE_TOKEN环境变量使用令牌登录。可以通过运行获取令牌:firebase login:ci然后在自动打开的浏览器窗口中登录。FIREBASE_TOKEN回到终端,您将获得一个令牌,稍后您可以通过分配和导出env以在“非交互”模式下登录时使用该令牌。变量到正在运行的容器。

于 2020-12-01T18:21:26.783 回答