Dockerfile:有没有办法从 .env 文件中读取变量

Ash*_*hik 10 environment-variables docker dockerfile docker-compose

我想读取文件中PORT定义的 Dockerfile 中的变量.env。有没有办法做到这一点?

这是我的 Dockerfile:

FROM node:11-alpine

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

ENV PORT=3000

COPY . .

RUN npm install

EXPOSE 3000

CMD ["npm", "run", "start"]
Run Code Online (Sandbox Code Playgroud)

sat*_*ime 6

更新

在聊天中讨论后意识到nodejs应用程序容器没有问题,问题来自错误配置的nginx代理。

工作 nodejs 应用程序的证明是下一个 docker-compose 文件。

version: "3"
services:
    api:
        build: .
    curl:
        image: curlimages/curl:7.70.0
        depends_on:
          - api
        entrypoint: ""
        command: curl -si --retry 5 --retry-delay 5 --retry-max-time 40 http://api:6000
        restart: on-failure
Run Code Online (Sandbox Code Playgroud)

原来的

如果您想在构建过程中更改端口(稍后运行容器时它将是静态的),请使用 build-args

docker build --build-arg APP_PORT=3000
Run Code Online (Sandbox Code Playgroud)
FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ARG APP_PORT=80
EXPOSE ${APP_PORT}

COPY . .
RUN APP_PORT=${APP_PORT} npm install

CMD APP_PORT=${APP_PORT} npm run start
Run Code Online (Sandbox Code Playgroud)

如果您希望能够在启动容器时更改端口 - 那么 build-args 不适合,您需要保留env变量。请注意,构建后EXPOSE无法更改。

无论如何,如果你有不同的端口EXPOSE并且你的应用程序监听 - 它不会破坏任何东西,应用程序的端口将在你想要的端口上可用,尽管它没有在EXPOSE.

你甚至可以跳过EXPOSE你的文件,因为它更像是你图像的元数据信息,而不是系统打开端口的指令:https : //docs.docker.com/engine/reference/builder/#expose

无论 EXPOSE 设置如何,您都可以在运行时使用 -p 标志覆盖它们。

如果您的图像在构建后是静态的(您不打算更改 .env),那么您可以执行下一步操作,npm install并且npm run start具有相同的 env。并且您仍然可以稍后更改端口,但不会影响 npm install。

FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . .
RUN export $(cat .env) && npm install 

CMD export $(cat .env) && npm run start
Run Code Online (Sandbox Code Playgroud)

如果您必须保留CMD为数组 - 那么我们需要创建一个引导脚本

FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . .
RUN export $(cat .env) && npm install

RUN echo '#!/usr/bin/env sh' > start.sh && echo 'export $(cat .env) && npm run start ${@}' >> start.sh
CMD ["sh", "./start.sh"]
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

6620 次

最近记录:

6 年,4 月 前