You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Shopify默认启动应用时遇TypeError问题求助

问题描述

通过Shopify CLI执行npm init @shopify/app@latest创建的默认应用,本地运行正常,但构建Docker镜像并运行时出现以下TypeError:

file:///app/index.js:29
  SCOPES: process.env.SCOPES.split(","),
                             ^
TypeError: Cannot read properties of undefined (reading 'split')
    at file:///app/index.js:29:30
    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:530:24)
    at async loadESM (node:internal/process/esm_loader:91:5)
    at async handleMainPromise (node:internal/process/esm_loader:91:5)
Node.js v18.12.1

已执行npm run shopify app env pull生成.env文件,甚至复制为process.env,尝试将env文件放在/web目录下仍无效。自动生成的Dockerfile内容如下:

FROM node:18-alpine
ARG SHOPIFY_API_KEY
ENV SHOPIFY_API_KEY=$SHOPIFY_API_KEY
EXPOSE 8081
WORKDIR /app
COPY web .
RUN npm install
RUN cd frontend && npm install && npm run build
CMD ["npm", "run", "serve"]

.env文件内容:

SHOPIFY_API_KEY=00000000000000000000000000000000
SHOPIFY_API_SECRET=00000000000000000000000000000000
SCOPES=write_products
HOST=https://a1b1-123-456-789-00.eu.ngrok.io

解决方法

1. 让Docker加载.env文件

Docker容器是隔离环境,不会自动读取本地.env文件,可通过两种方式注入变量:

  • 方式一:修改Dockerfile复制.env文件
    确保.env文件和Dockerfile在同一目录,修改Dockerfile添加复制.env的步骤:

    FROM node:18-alpine
    ARG SHOPIFY_API_KEY
    ENV SHOPIFY_API_KEY=$SHOPIFY_API_KEY
    EXPOSE 8081
    WORKDIR /app
    # 先复制.env文件到容器工作目录
    COPY .env .
    COPY web .
    RUN npm install
    RUN cd frontend && npm install && npm run build
    CMD ["npm", "run", "serve"]
    
  • 方式二:运行容器时挂载.env文件
    不修改Dockerfile,通过命令行参数加载本地.env:

    docker run --env-file .env -p 8081:8081 <你的镜像名称>
    

2. 确认应用加载.env文件

检查项目的index.js顶部是否有加载dotenv的代码,确保应用启动时读取环境变量:

import dotenv from 'dotenv';
dotenv.config();

Shopify默认应用通常已安装dotenv,但如果缺失,执行npm install dotenv安装后添加上述代码。

3. 修复路径问题

自动生成的Dockerfile用COPY web .复制代码,如果.env文件在项目根目录(而非web子目录),必须先复制.env再复制web内容,否则容器内的/app目录不会有.env文件。

4. 本地运行正常的原因

Shopify CLI在本地运行时,会自动读取项目根目录的.env文件或通过内部机制注入环境变量,因此本地无需额外配置,但Docker容器没有这个自动机制,必须手动传递环境变量。

内容的提问来源于stack exchange,提问作者Mark Turner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:35:14