在docker build中没有这样的文件或目录

我是docker工人,试图将应用程序移植到它。 实质上,在启动时,应用程序需要执行一些我已经封装在脚本中的依赖于环境的工作。

我的应用看起来像

Dockerfile scripts/run.sh build-development/stuff build-production/stuff 

这是我的Dockerfile:

 FROM nginx RUN chmod +x scripts/run.sh CMD ["scripts/run.sh", APP_ENV] EXPOSE 80 

这里是scripts / run.sh:

 #!/bin/bash mkdir dist chmod -R 777 dist if [ $1 == "development" ] then cp -R build-development/. /usr/share/nginx/html fi if [ $1 == "stage" ] then cp -R build-production/. /usr/share/nginx/html sed -i 's/production/stage/g' dist/index.html fi if [ $1 == "production" ] then cp -R build-production/. /usr/share/nginx/html fi 

这个想法是,我将像这样运行图像:

 docker run -e APP_ENV=development app-name 

它会被送入脚本,它将复制正确的文件。

不幸的是,我从来没有去运行图像,因为在构build步骤:

 docker build -t app-name . 

我得到的错误

脚本/ run.sh不是一个文件或目录

我不明白为什么我得到这个错误,我想这是来自天真的误解。 我做错了什么,我怎样才能使我的项目工作?

提前致谢。

看起来你想让scripts/run.sh成为容器的一部分。 在这种情况下,在您尝试运行chmod之前,您需要将其复制到映像中。

 FROM nginx COPY scripts/run.sh /scripts/run.sh RUN chmod +x /scripts/run.sh CMD ["/scripts/run.sh", APP_ENV] 

这将复制./scripts/run.sh (相对于您的构build目录)到/scripts/run.sh的映像,以便您以后的RUNCMD具有可用的path。