所以我有一个已创建的NodeJS API,它在package.json中包含一个Private NPM包。
我在这个项目中有以下Docker文件:
Dockerfile
FROM node:10
WORKDIR /usr/src/app
ARG NPM_TOKEN
COPY .npmrc ./
COPY package.json ./
RUN npm install
RUN rm -f ./.npmrc
COPY . .
CMD [ "npm", "start" ]
.npmrc
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
我已经通过运行以下命令来构建此API:
docker build --build-arg NPM_TOKEN=${MY_NPM_TOKEN} -t api:1.0.0 .
这将成功构建图像。
在我的主应用程序中,我有一个docker-compose.yml,我想运行该映像。
version: '3' services: redis: container_name: redis image: redis:3.2.8 ports: - "6379:6379" volumes: - ./data:/data api: container_name: api image: api:1.0.0 build: context: . args: - NPM_TOKEN={MY_NPM_TOKEN} ports: - "3001:3001"
我运行docker-compose up
时失败,并显示以下错误:
Failed to replace env in config: ${NPM_TOKEN}
有人有什么主意,为什么我的图像没有被通过的ARG
所吸引?
答案 0 :(得分:0)
根据我的理解,您正在尝试从名为NPM_TOKEN
的环境变量传递MY_NPM_TOKEN
自变量。
但是,语法上存在错误,您应该更新docker-compose.yaml
文件
来自- NPM_TOKEN={MY_NPM_TOKEN}
到- NPM_TOKEN=${MY_NPM_TOKEN}