将参数从docker-compose.yml传递到docker映像

将参数从docker-compose.yml传递到docker映像,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,因此,我创建了一个nodejsapi,它在package.json中包含一个私有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"

因此,我创建了一个nodejsapi,它在package.json中包含一个私有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}-tapi:1.0.0.

这成功地构建了映像

在我的主应用程序中,我有一个docker-compose.yml,我想运行这个映像

version:'3'服务:redis:container\u名称:redis映像:redis:3.2.8端口:-“6379:6379”卷:-./data:/data api:container\u名称:api映像:api:1.0.0构建:上下文:。args:-NPM\u令牌={MY\u NPM\u令牌}端口:-“3001:3001”

当我运行
docker compose up
时,它失败并出现错误:

未能在配置中替换env:${NPM_TOKEN}


有人知道为什么我的图像没有接收传递的
ARG
吗?

据我所知,您试图传递名为
my\u NPM\u TOKEN
的环境变量中的
NPM\u TOKEN
参数

但是,语法中有一个错误,您应该更新
docker compose.yaml
文件

from
-NPM\u TOKEN={MY\u NPM\u TOKEN}


对于
-NPM_-TOKEN=${MY_-NPM_-TOKEN}

我认为您应该使用
docker compose build
进行测试,但无论哪种方法,如果映像不存在,它都会生成。您如何设置
$MY\u NPM\u令牌
?你有一个.env文件吗?@leeman24
${MY_NPM_TOKEN}
是一个字符串,它是来自NPM的一个标记,因此在我的文章中它的一个示例是:
-NPM_TOKEN=4884nfhf939fn39