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

Docker容器中脚本执行cp命令无法复制配置文件求助

问题排查与解决

核心问题分析

你遇到的情况大概率是Windows下的CRLF换行符导致Shell脚本执行异常,或者脚本缺少执行权限。

原因1:Windows换行符(CRLF)不兼容Alpine Linux

Windows系统默认用CRLF(\r\n)作为换行符,而Alpine Linux这类Unix系统用LF(\n)。当start.sh带着CRLF换行符被复制到容器里,执行时会把\r当成命令的一部分,导致cp命令的路径解析错误,自然无法完成复制操作。

原因2:start.sh缺少执行权限

Docker从Windows复制文件时,可能会丢失文件的执行权限,导致容器启动时无法正常执行脚本(虽然你手动执行没问题,但手动执行时可能用了sh start.sh绕开了权限检查)。


具体修复步骤

1. 修正start.sh的换行符为LF

  • 在VS Code里打开start.sh,点击右下角状态栏的CRLF,切换选择LF
  • 或者用Git命令全局配置自动转换:git config --global core.autocrlf input,重新提交脚本确保后续文件都是LF格式

2. 在Dockerfile中添加执行权限设置

修改Dockerfile,给start.sh添加可执行权限:

FROM nginx:1.23-alpine as application
WORKDIR /build
COPY configuration configuration
COPY start.sh start.sh
# 赋予脚本执行权限
RUN chmod +x start.sh
ENTRYPOINT /build/start.sh

3. 可选:添加调试输出验证环境变量

在start.sh里加一行调试代码,确认环境变量是否正确传递:

echo "当前部署环境:${DEPLOYMENT_ENVIRONMENT}"
cp configuration/${DEPLOYMENT_ENVIRONMENT}/custom.configuration.conf /etc/nginx/conf.d
nginx -g "daemon off;"

启动容器后查看日志:docker logs <容器ID>,就能确认环境变量是否正常加载。


验证修复

重新构建镜像并运行:

docker build -t custom-nginx .
docker run -e DEPLOYMENT_ENVIRONMENT=qa -p 8080:80 custom-nginx

再用docker exec进入容器检查/etc/nginx/conf.d路径,配置文件应该已成功复制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:15:34