Я схожу с ума здесь.
Я работал над файлами Dockerfile
и docker-compose.yml
для моего проекта. Я недавно обновил зависимости моего проекта. Когда я собираю проект вне контейнера, используя composer install
, он строится с правильными зависимостями. Однако, когда я собираю проект в Docker-контейнере, он загружает и устанавливает последние зависимости, но затем каким-то образом запускает приложение, используя устаревшие зависимости!
Прежде всего, вот как выглядит мой Dockerfile
:
FROM composer
# Set the working directory within the docker container
WORKDIR /app
# Copy in the app, then install dependencies.
COPY . /app
RUN composer install
Я исключил файл composer.lock
и каталог vendor
в моем .dockerignore
:
vendor
composer.lock
Вот мой docker-compose.yml
:
version: "3"
services:
app:
build: .
volumes:
- app:/app
webserver:
image: richarvey/nginx-php-fpm
volumes:
- app:/var/www/html
volumes:
app:
Обратите внимание, что процесс сборки происходит внутри тома app
. Я не думаю, что это должно быть частью проблемы, так как я запускаю docker system prune
каждый раз, чтобы очистить все существующие тома.
Это то, что я делаю, чтобы запустить контейнер. Во время устранения неполадок я выполнял следующие команды для удаления любых кэшированных файлов перед запуском контейнера:
$ docker system prune
$ docker-compose build --no-cache
$ docker-compose up --force-recreate
Наблюдая за установкой и загрузкой зависимостей, Я вижу, что он загружает и устанавливает правильные версии! Так что в какой-то момент процесса он должен иметь правильный файл composer.json
.
Тем не менее, как-то, как только сборка завершена и приложение запускается, я получаю те же старые предупреждения об устаревших зависимостях, и, конечно же, и composer.json
внутри контейнера устарел!
Итак, мои вопросы:
- Как TF файл
composer.json
в контейнере устарел?
ГДЕ откуда берется устаревший файл, так как он больше не существует ни в одном изображении или кэше ??
- Как TF удается установить последние зависимости с этим устаревшим файлом composer.json, но затем не использовать их, и фактически вернуть файл composer.json и зависимости ??