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

Docker容器中同时执行Shell脚本与Nginx模板传参的问题求助

问题描述

使用Docker构建React应用并以Nginx作为生产服务器,需同时完成两项任务:

  • 执行env.sh脚本,在容器运行时动态为React应用生成环境变量配置文件env-config.js
  • 通过Nginx模板文件default.conf.template,将环境变量注入Nginx配置以完成反向代理规则

但当前Dockerfile仅能执行其中一项任务,尝试多种CMD/ENTRYPOINT写法及自定义启动脚本均未解决,请求修改Dockerfile确保两项任务均可成功执行。


解决方案

核心问题在于Nginx官方镜像自带的entrypoint会自动处理/etc/nginx/templates/下的模板文件,替换环境变量后生成最终配置再启动Nginx。之前的写法要么跳过了这个官方entrypoint,要么执行顺序错误,导致两项任务无法同时完成。

修改后的Dockerfile

# React应用构建阶段
FROM node:18 AS build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

# 生产环境Nginx阶段
FROM nginx:1.18.0

# 复制构建好的React静态文件到Nginx默认目录
COPY --from=build /app/build /usr/share/nginx/html
# 复制Nginx模板到官方指定的模板目录
COPY ./default.conf /etc/nginx/templates/default.conf.template

# 复制环境变量处理脚本和样本文件到系统可执行目录
COPY ./env.sh /usr/local/bin/env.sh
COPY ./env_sample.txt /usr/local/bin/env_sample.txt
RUN chmod +x /usr/local/bin/env.sh

# 自定义入口:先执行React环境变量配置脚本,再调用Nginx官方入口处理模板并启动服务
ENTRYPOINT ["/bin/sh", "-c", "/usr/local/bin/env.sh && /docker-entrypoint.sh nginx -g 'daemon off;'"]

EXPOSE 80

调整后的env.sh

(修正路径问题,避免与静态文件目录混淆)

#!/bin/sh

# 切换到React静态文件根目录
cd /usr/share/nginx/html
echo "window._env_ = {" > ./env-config.js
awk -F '=' '{ print $1 ": \"" (ENVIRON[$1] ? ENVIRON[$1] : $2) "\"," }' /usr/local/bin/env_sample.txt >> ./env-config.js
echo "}" >> ./env-config.js

容器运行命令(保持原命令即可)

docker run -d \
        --name nginx_ui_cont \
        -e 'NGINX_SERVER=192.168.7.109' \
        -e ANALYTICS_API_CONT=analytics_api_cont \
        -e API_CONT=api_cont \
        -e 'REACT_APP_HOST_IP_ADDRESS=http://192.168.7.109' \
        -p 80:80 \
        nginx_ui:1

关键说明
  1. 执行顺序:先运行env.sh生成React所需的环境变量配置文件,再调用Nginx官方的/docker-entrypoint.sh处理模板并启动Nginx,确保两项任务按依赖顺序完成。
  2. Nginx模板自动处理:Nginx官方镜像会自动扫描/etc/nginx/templates/下的.template文件,将${变量名}替换为容器环境变量的值,生成最终配置到/etc/nginx/conf.d/。
  3. 路径规范:将脚本和样本文件放到/usr/local/bin/目录,避免与React静态文件混放,同时在脚本中明确切换到静态文件目录生成配置,路径逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:05:57