当前位置: 首页 > 知识库问答 >
问题:

为什么docker编写不将环境变量传递给nodejs应用程序?

岳正阳
2023-03-14

我在AWS ECS中使用docker,我希望使用docker将env变量传递给我的nodejs应用程序。

我的app.js很简单,它有告诉我某个变量的值的路由:

 app.get('/test', (req, res) => res.status(200).send(`${process.env.SOME} OK`));
 docker-compose -f .docker/docker-compose.myweb.ecr.yml build www-app
 docker-compose -f .docker/docker-compose.myweb.ecr.yml push www-app
 aws ecs update-service --cluster web --service www --force-new-deployment
FROM node:latest

# ENV SOME=3000 <--- THIS IS WORKS, BUT I WANT TO DO IT IN COMPOSE FILE.

WORKDIR /usr/src/app

COPY ./dist/myapp/package.json .

RUN npm install

COPY ./dist/myapp .

EXPOSE 3000

CMD [ "npm", "start" ]
version: '3'

services:
  www-app:
    # env_file: ../.env
    image: 32934544.dkr.ecr.us-east-2.amazonaws.com/www-app:latest
    environment:
      - SOME=6000
    build:
      context: ../
      dockerfile: ./.docker/Dockerfile

共有1个答案

乌翔
2023-03-14

您需要使用此处指定的“args”:

取自[1]

如果服务指定了生成选项,则在环境中定义的变量在生成过程中不会自动可见。使用build的args子选项定义生成时环境变量

 类似资料:
  • 问题内容: 我是Docker的新手,目前尚不清楚如何从容器访问外部数据库。硬编码连接字符串的最佳方法是吗? 问题答案: 您可以使用该标志将环境变量传递到您的容器。 启动脚本的示例: 或者,如果您不希望在命令行中使用,等显示该值,则可以直接从当前环境中获取该值,如果您不带: 如果您有许多环境变量,尤其是要保密的话,可以使用env文件: --env-file标志将文件名作为参数,并期望每行采用VAR

  • 我是Docker的新手,不清楚如何从容器访问外部数据库。是在连接字符串中硬编码的最佳方法吗?

  • 问题内容: 如何将主机环境变量(例如用户名和主机名)传递给dockerfile? 例如,如果我的用户名是: 如何编写Docker文件以获得相同的输出? 问题答案: 我遇到了同样的问题。我的解决方案是在docker-compose.yml内部提供变量,因为yml支持使用环境变量。 我认为这对我来说是最有效的方式,因为我不喜欢在命令行中使用类似以下内容一遍又一遍地键入它 在容器中,声明将无效,将设置为

  • 我正在使用GAE部署我的应用程序,我想把一些环境变量传递给我的GAE实例。例如,每次我使用DB时,分配当前是这样的: 这很好,但问题是它是一个共享代码,每次有人进行本地测试时,它都会更改路径,并将更改推送到存储库。当有人拉动新的更改时,它需要更改以发出db请求,因为每个人都有不同的套接字更改路径。因此,我创建了以下声明: 因此,如果某个人的系统中有一个环境变量,那么它会接受该变量并避免绝对路径。问

  • 问题内容: 为什么此代码无法编译? 为什么我不能将类变量传递给? 问题答案: 该操作符对引用类型,像,而不是对象,如。您可能想要类似 旁注:如果编写,您的代码将更加简洁 但是,我不确定是否需要某种方法。

  • 我是第一次和docker合作,我正在努力弄清楚这一切。 在我正在进行的这个项目中,我们在启动文件中广泛使用了Windows环境变量。为了将这些内容放入配置中,我们使用AddEnvironmentVariables(string prefix)方法,如下所示: 在localhost和Azure中,这是没有问题的,因为我们已经将它们添加到了这些环境中。但是我不能想出如何在我的docker容器中配置这些