Mam miejsce, w Dockerfile
którym kopiuję istniejący katalog (z zawartością) do kontenera, który działa dobrze:
Dockerfile
FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/
RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
Ale kiedy używam docker-compose.yml
pliku, jest tylko katalog, aw3somevideo
a wewnątrz aw3somevideo
nie ma nic.
docker-compose.yml :
php:
build: php/
volumes:
- ./Frontend/ :/var/www/html/
- ./Frontend/index.php :/var/www/html/
ports:
- 8100:80
Może nie rozumiem funkcji volumes
i jeśli tak jest, powiedz mi, jak skopiować moje istniejące pliki do kontenera za pośrednictwem docker-compose.yml
pliku.
docker
copy
docker-compose
volumes
Doktor
źródło
źródło
volumes:
sekcję z pliku Docker-Compose. Twój obraz ma już dane. Sekcja Volume: po prostu nadpisuje dane. Przejdź również do bieżącego formatu docker-compose (wersja 2).Odpowiedzi:
Dany
jeśli
/dir/on/host
nie istnieje, jest tworzony na hoście, a pusta zawartość jest montowana w kontenerze pod adresem/var/www/html
. Jakakolwiek zawartość, którą miałeś wcześniej w/var/www/html
kontenerze, jest niedostępna, dopóki nie odmontujesz woluminu; nowy wierzchowiec ukrywa starą zawartość.źródło
var/www/html/
nie jest już kopiowana,/dir/on/host
nawet jeśli nie istnieje? Czy istnieje sposób wymuszenia kopiowania danych z kontenera docker-container do hosta podczas pierwszego uruchomienia kontenera?docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"
. Nie zapomnij użyćexec
do wywołania ostatniej komendy, tak aby przypisano jej PID1. To zapewni, że myapp otrzyma sygnały zakończenia (na przykład Ctrl-C).