V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dominickkorey
V2EX  ›  Docker

Dockerfile 的一个小问题

  •  
  •   dominickkorey · 2023-03-17 17:08:24 +08:00 · 1440 次点击
    这是一个创建于 624 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想构建一个容器,在项目的根目录下有一个 .env 的文件想一同复制到容器 build 后的 /dist 中,但试了好久都提示找不到环境变量,不知道怎么加入到 Dockerfile 里,想问问大家怎么添加的

    ###################
    # BUILD FOR LOCAL DEVELOPMENT
    ###################
    
    FROM node:18-alpine As development
    
    # 创建应用目录
    WORKDIR /usr/src/app
    
    # 复制依赖清单到容器镜像里.
    # 这个星号通配符意思是复制 package.json 和 package-lock.json,复制到当前应用目录.
    # 首先复制这个选项可以防止在每次代码更改时重新运行 npm install.
    COPY --chown=node:node package*.json ./
    
    # 使用 npm ci 来安装依赖而不是 npm install
    RUN npm ci
    
    # 复制安装后的依赖包到当前目录下
    COPY --chown=node:node . .
    
    # 使用指定的用户而不是 root 权限用户
    USER node
    
    ###################
    # BUILD FOR PRODUCTION
    ###################
    
    FROM node:18-alpine As build
    
    WORKDIR /usr/src/app
    
    COPY --chown=node:node package*.json ./
    
    # 我们需要通过 Nest CLI 来执行 npm run build,这是个开发依赖,然后把安装后依赖全部复制到指定目录
    COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
    
    COPY --chown=node:node . .
    
    # 执行打包命令
    RUN npm run build
    
    # 设置生产环境变量
    ENV NODE_ENV production
    
    # 运行' npm ci '会删除现有的 node_modules 目录,并传入——only=production 确保只安装了生产依赖项。这确保 node_modules 目录尽可能优化
    RUN npm ci --only=production && npm cache clean --force
    
    USER node
    
    ###################
    # PRODUCTION
    ###################
    
    FROM node:18-alpine As production
    
    # 将生产依赖和打包后的文件复制到指定目录下
    COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
    COPY --chown=node:node --from=build /usr/src/app/dist ./dist
    
    # 启动服务
    CMD [ "node", "dist/main.js" ]
    
    
    6 条回复    2023-03-17 18:26:09 +08:00
    mdn
        1
    mdn  
       2023-03-17 17:15:28 +08:00
    最好不要将 .env 放入镜像中
    可以使用 docker run --env-file /home/.env image ,读取环境变量文件
    hingle
        2
    hingle  
       2023-03-17 17:16:42 +08:00
    看看有没有 .dockerignore 文件
    dominickkorey
        3
    dominickkorey  
    OP
       2023-03-17 17:20:20 +08:00
    @mdn 尝试过但是还提示缺少环境变量,给我整不会了

    @hingle 有,但是里面没加 .env 的文件
    hingle
        4
    hingle  
       2023-03-17 17:24:15 +08:00
    COPY --chown=node:node .env ./dist
    dominickkorey
        5
    dominickkorey  
    OP
       2023-03-17 17:52:33 +08:00
    @hingle 试过这么写但都不行
    wdssmq
        6
    wdssmq  
       2023-03-17 18:26:09 +08:00
    .env 不应该是从 node 执行的当前路径加载么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2757 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:40 · PVG 20:40 · LAX 04:40 · JFK 07:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.