我使用 NodeJs 和 Firebase工具为本地开发环境构建 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
WON' WORK (我和#39;已经尝试过,如其他线程所述)
这是 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
查看一些截图:
答案 0 :(得分:2)
我建议你将firebase登录步骤移到运行时。在运行时,我指的是Docker容器正在运行。
所以Dockerfile应该拥有的唯一与FCM相关的命令是:
RUN npm install -g firebase-tools
然后,在运行容器时,将容器中的端口9005映射到主机上的相同端口,如下所示:
docker run \
-i -t \
...
-p 9005:9005 \
( N.B。这是假设重定向端口固定为 9005 )
然后,您可以在容器中运行其他命令(使用 docker exec ):
firebase login
firebase init functions
...
( P.S。我相信生产环境会有更好的方法,因为我的答案只适用于本地开发)
答案 1 :(得分:0)
一个老问题,但是对于任何尝试在不与终端交互的情况下登录的用户(例如在对Docker进行仿真时),都可以使用FIREBASE_TOKEN
环境变量使用令牌登录。
可以通过运行firebase login:ci
并在自动打开的浏览器窗口中签名来获得令牌。返回终端,您将获得一个令牌,以后您可以通过分配和导出FIREBASE_TOKEN
环境来以“非交互式”模式签名时使用。变量到正在运行的容器。