Не могли бы вы посоветовать, как установить зависимости npm и composer в моем корневом веб-каталоге через Dockerfile
в приложении AWS Elasticbeanstalk Multi-Container Docker?
Я создавал свои файлы из контейнера докеров через Dockerfile с таким кодом:
// Dockerfile
...
# npm
WORKDIR /var/www/tmp_html
RUN mkdir -p npm
WORKDIR /var/www/tmp_html/npm
COPY php-app/package.json package.json
RUN npm update && npm install
# composer
... // similar to above
# Switch working directory back to webroot
WORKDIR /var/www/html
После развертывания, когда я подключаюсь по ssh к экземпляру php:fpm
контейнер, я вижу следующую структуру:
root@3f8bf1xc2a78:/var/www# ls
html tmp_html
Встроенные файлы находятся в / tmp_html, и я пытаюсь переместить их в / html. через мой Dockerfile вот так:
ONBUILD RUN mv -v ../tmp_html/composer/protected/vendor/* protected/vendor \
&& rm -rf ../tmp_html/composer/protected \
&& mv -v ../tmp_html/composer/* . \
&& mv -v ../tmp_html/npm/* . \
&& rm -rf ../tmp_html
Проблема в том, что этап ONBUILD не работает. В Docker. Осмотрите контейнер php: fpm, я заметил следующее: «OnBuild»: null. Похоже, что onbuild даже не запустился. Файлы в /html
и /tmp_html
папки остаются прежними.
Кроме того, если я запускаю команды просто без команды ONBUILD, при отправке докеров в репозиторий образов докеров целевое местоположение не может быть обнаружено и отказывается разрешать мне запускать, поэтому я не могу даже развернуть. Ошибка: mv: target 'protected/vendor' is not a directory
Я думаю, это связано с тем, что elasticbeanstalk не скопировал пакет, поэтому на данный момент папка html даже недоступна.
Остановитесь с временным каталогом. Скопируйте файлы в образ там, где они вам нужны, а затем при создании образа установите модули npm и модули композитора.
Не знаете, почему вы хотите, чтобы они были во временной папке, а затем переместили их?