Нет такого файла или каталога в сборке докеров

Я новичок в докере и пытаюсь подключить к нему приложение. По сути, при запуске приложение должно выполнить некоторую работу, зависящую от среды, которую я инкапсулировал в скрипт.

Мое приложение выглядит

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 

и вот скрипты / 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 

и он будет загружен в скрипт, который скопирует правильные файлы.

К сожалению, я никогда не запускаю изображение, потому что во время этапа сборки:

 docker build -t app-name . 

Я получаю ошибки о

scripts / 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 (относительно вашего каталога сборки) в файл /scripts/run.sh , поэтому ваш более поздний RUN и CMD имеют этот путь.