У меня есть следующие контейнеры:
nginx:latest
myapp
контейнер (производный от php -fpm: alpine)
В настоящее время у меня есть фиктивный проект с конвейером CI, который во время сборки компилирует производственный вариант ресурсов (images / js / css, ...). Файлы сборки попадают в (/ public / build). В самом конце конвейера CI я упаковываю все в образы Docker и загружаю их в Hub.
И nginx
, и myapp
имеют установленный том (без привязки монтирования) и указывают на /opt/ci-test/public/build
.
Это работает впервые.
Но допустим, я добавляю новый файл new.css
- мою новую версию docker изображения будет содержать вариант сборки new.css
.
Запуск нового контейнера с уже существующим томом не обнаруживает новых файлов , и я понимаю, что этого не должно быть. . Могу создать новый том my_app_v2
.
На данный момент nginx
не видит этот новый том, и его необходимо удалить и повторно запустить (с новым томом), чтобы он вступил в силу.
Есть ли простой способ преодолеть это?
Я намерен использовать контейнер nginx
для нескольких приложений PHP, и мне нужно воздерживаться от его уничтожения всякий раз, когда я обновляю одно из обслуживаемых приложений. Это плохое решение?
EDIT:
Один обходной путь, который мне удалось найти, - это удалить все файлы из прикрепленного тома и запустить новый myapp
контейнер. Это отражает все последние файлы на томе. Но это кажется грязным ...
EDIT2:
Связанная проблема (случай 3): https://github.com/moby/moby/issues/18670#issuecomment -165059630
EDIT3:
Dockerfile
FROM php:7.2.30-fpm-alpine3.11
COPY . /opt/ci-test
WORKDIR /opt/ci-test
VOLUME /opt/ci-test/public/build
Пока у меня нет docker-composer
, и я запускаю контейнеры вручную с помощью команд:
docker run -it -d --name php71alp -v shr_test:/opt/ci-test/public/build -p 9000:9000 <myaccount>/citest
docker run -it -d --name nginx -v shr_test:/var/www/citest -p 80:80 nginx:latest