Docker Compose ile dosyaları bir kapsayıcıya kopyalama


94

Bir var Dockerfilekendimi iyi çalışır kaba (içerikle) varolan bir dizin kopyalamak burada:

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 

Docker exec ile dizin listelemesinin ekran görüntüsü

Ama bir docker-compose.ymldosya kullandığımda sadece dizin var aw3somevideove içinde aw3somevideohiçbir şey yok.

docker-compose.yml :

 php:
    build: php/
    volumes:
      - ./Frontend/ :/var/www/html/
      - ./Frontend/index.php :/var/www/html/
    ports:
      - 8100:80

Boş dizin listesinin ekran görüntüsü

Belki işlevini anlamıyorum volumesve durum buysa lütfen mevcut dosyalarımı bir docker-compose.ymldosya aracılığıyla konteynere nasıl kopyalayacağımı söyleyin .


4
volumes:Docker-compose dosyanızdan bölümünüzü kaldırın . Görüntünüz zaten verilere sahip. Volumes: bölümü sadece verilerin üzerine yazar. Ayrıca geçerli docker-compose biçimine (sürüm 2) geçin.
Bernard

@Alkaline thx gerçekten sorun buydu. Ama ciltler neden tüm dizini kopyalamadı?
TheDoctor

Bu sorunu kapatmanız için yanıt olarak yanıtlayacağım.
Bernard,

Yanıtlar:


80

Verilen

    volumes:
      - /dir/on/host:/var/www/html

yoksa /dir/on/host, ana bilgisayarda oluşturulur ve boş içerik, adresindeki kapsayıcıya eklenir /var/www/html. /var/www/htmlKonteynerin içinde daha önce sahip olduğunuz içeriğe , siz birimi kaldırana kadar erişilemez; yeni montaj eski içeriği saklıyor.


Son docker sürümlerinde içeriğinin var/www/html/artık /dir/on/hostmevcut olmadığında bile kopyalanmaması mümkün mü? Bir kapsayıcıyı ilk kez başlatırken verileri docker-container'dan ana bilgisayara zorla kopyalamanın bir yolu var mı?
Tarator

1
@Tarator evet gerçekten, sağ taraf artık ana bilgisayara kopyalanmıyor. Cevabı güncelleyeceğim. Konteyner başlangıcında kopyalamanın bir yoluna gelince, bunun gibi bir şeyle başlatma komutunu geçersiz kılabilirsiniz docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp". execPID1'e atanması için son komutu çağırmayı unutmayın . Bu, uygulamamın sonlandırma sinyallerini (örneğin Ctrl-C) almasını sağlayacaktır.
Bernard

Merhaba, ben de docker-compose ile aynı şeyi yapmaya çalışıyorum ama bir hata alıyorum, lütfen bir göz
atabilir misiniz

Hey, Bernard, cevabında " sağ tarafın hacmim gibi adlandırılmış bir birimi mi yoksa ana bilgisayardaki bir yolu mu belirteceğini" belirtiyorsun . Orada "sol el" demek istemediniz, çünkü burada ya bir birim ya da ana bilgisayar yolu belirlenir, bu daha sonra rhs üzerindeki konteyner konumuna eşlenir? Docker'ın sol ve sağ arasında dosya kopyalamayı nasıl yönetebileceğinden ve nasıl değiştirildiğinden bahsettiğinizi anlıyorum.
charlie arehart

@charliearehart Haklısın. Bu hatayı şimdi düzelteceğim.
Bernard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.