繁体   English   中英

在脚本中使用 cp 命令未在 Docker 容器内复制文件

[英]File is not getting copied inside Docker container using cp command in a script

我正在尝试使用自定义配置文件在 Docker 中运行自定义 nginx 服务器(我们称之为custom.configuration.conf

而且,我希望容器根据部署环境选择配置文件。 因此,在我的存储库中,我将配置如下:

configuration(folder)
|
----> qa (sub-folder of configuration folder)
     |
     ----> custom.configuration.conf
|      
----> prd (sub-folder of configuration folder)
      |
      ---> custom.configuration.conf

为了动态选择这些文件,我引入了一个环境变量DEPLOYMENT_ENVIRONMENT我在名为start.sh的文件中使用它

start.sh脚本如下:

cp configuration/${DEPLOYMENT_ENVIRONMENT}/custom.configuration.conf /etc/nginx/conf.d
nginx -g "daemon off;"

我的 Dockerfile 看起来像这样:

FROM nginx:1.23-alpine as application
WORKDIR /build
COPY configuration configuration
COPY start.sh start.sh
ENTRYPOINT /build/start.sh

我用来构建和运行容器的命令是:

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

但是,当我docker exec进入容器时,我在/etc/nginx/conf.d看不到custom.configuration.conf

我在带有 Docker 桌面的 Windows 10 机器上运行它。

start.shDockerfileconfiguration文件夹/文件位于我的存储库的根级别。

我不明白我哪里错了。 请帮助我理解为什么我无法将文件从容器复制到容器。

PS:我实际上尝试在容器内运行cp configuration/${DEPLOYMENT_ENVIRONMENT}/custom.configuration.conf /etc/nginx/conf.d命令来检查命令是否错误。 但是,如果我在容器内手动执行它,它会起作用,但是当我使用docker run运行它时会失败。

向 entrypoint.sh 脚本添加错误处理:

cp -v configuration/${DEPLOYMENT_ENVIRONMENT}/custom-configuration.conf /etc/nginx/conf.d
if [ "$?" != "0" ]
then
    echo "Could not copy configuration for DEPLOYMENT_ENVIRONMENT=${DEPLOYMENT_ENVIRONMENT}!"
    exit 1
fi
nginx -g "daemon off;"

现在在运行容器时检查 docker 日志。 他们应该给你更多关于发生了什么的提示。

我已经按照此处的指示执行了从 Windows(CR LF) 到 Unix(LF) 的 EOL 转换https://stackoverflow.com/a/50212715/6123155并为我解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM