2017-02-15 25 views
19

Docker konusunda oldukça yeniyim ve bazı birim kavramları bana oldukça kafa karıştırıyor.Birimdeki tek bir dosyayı nasıl yüklerim

Yapmaya çalıştığım şey bir php uygulamasına başvurmaktır. Dockerfile arşivini indirip, ayıklayın vb.

Her şey iyi çalışıyor, ancak yeni bir sürüm yayınlanırsa ve dockerfile dosyasını güncellerseniz, uygulamayı yeniden yüklemem gerekir, çünkü config.php üzerine yazılır.

Dosyayı bir birim olarak bağlayabileceğimi düşündüm, çünkü veritabanıyla yaptığım gibi.

Bir birimi ve bir yolu olan iki yolu denedim.

liman işçisi-oluşturma:

version: '2' 
services: 
    app: 
    build: src 
    ports: 
     - "8080:80" 
    depends_on: 
     - mysql 
    volumes: 
     - app-conf:/var/www/html/upload 
     - app-conf:/var/www/html/config.php 
    environment: 
     DB_TYPE: mysql 
     DB_MANAGER: MysqlManager 

    mysql: 
    image: mysql:5.6 
    container_name: mysql 
    volumes: 
     - mysqldata:/var/lib/mysql 
    ports: 
     - 3306:3306 
    environment: 
     MYSQL_ROOT_PASSWORD: 
     MYSQL_DATABASE: 
     MYSQL_USER: 
     MYSQL_PASSWORD: 

volumes: 
    mysqldata: 
    app-conf: 
hatayla sonuçlanır

:

Ve takılı bir birim olarak, belirli bir yol ile çalıştı. Bununla birlikte, her iki yol da çalışmıyor. Monte edilen ses ile, yüklemenin oluşturulduğunu görüyorum.

Ama sonra bir dizin değil \\ "\ ""

I/src ile denersem "\\ neden"

/var/www/html/config.php \\ ile başarısız/liman işçisi/myapp/yükleme/config.php:..

Docker sonra yükleme klasör ve bir config.php klasör değil dosya

oluşturur Veya başka bir yolu yoktur /var/www/html/config.php yapılandırmaya varmak için:

cevap

35

Dosya hacimleri liman işçisi bu şekilde yapılması() env değişkenleri kullanabilirsiniz mutlak yol örneğin (ve dosya adını bahsetmek gerekir):

volumes: 
     - /src/docker/myapp/upload:/var/www/html/upload 
     - /src/docker/myapp/upload/config.php:/var/www/html/config.php 

Ayrıca yapabilirsiniz:

volumes: 
     - ${PWD}/upload:/var/www/html/upload 
     - ${PWD}/upload/config.php:/var/www/html/config.php 

Eğer docker-compose komutunu,

+12

ben /src/docker/myapp/upload/config.php:/var/www/html/config.php Docker sonra yükleme klasör ve bir Config.php klasör oluşturur çalışırsanız, dediğim gibi. Bir dosya değil. –

+4

Gönderinizde farklı yazdınız. Dosya varsa dosya olarak monte etmelidir. – BlackStork

+0

https://docs.docker.com/engine/tutorials/dockervolumes/#/mount-a-host-file-as-a-data-volume <- defenitely çalışıyor olmalı – BlackStork

9

'dan benzer bir sorundan şikayet ediyordum. Config dosyasımı konteynere aktarmaya çalışıyordum, böylece görüntüyü yeniden oluşturmadan ihtiyacım olan her an onu tamir edebiliyordum.

Aşağıdaki komutun, kaptan /root/app/config.py kapsayıcısını dosya olarak Docker ana bilgisayarında $(pwd)/config.py içine alacağını düşündüm.

docker run -v $(pwd)/config.py:/root/app/config.py my_docker_image 

Ancak, her zaman adlı bir dizin config.py bir dosya değil yarattı.

ipucu ararken, ben Gördüğünüz gibi benim liman işçisi konak $(pwd)/config.py olmadığı için, her zaman bir dizin olarak oluşturulur

If you use -v or --volume to bind-mount a file or directory that does not yet exist on the Docker host, -v will create the endpoint for you. It is always created as a directory.

(here itibaren) sebep buldum.

Docker ana bilgisayarında config.py oluştursam bile. $(pwd)/config.py yalnızca /root/app/config.py ürününü dışa aktarmıyor /root/app/config.py ürününü dışa aktarmayın.

+2

Sadece 'Dockerfile'da bir' dosyaya/dosyaya 'dokunma yolu ekledim, eğer monte ettiğimde hala bir dosya olacaktı (yaratılmış bir dir değil) – shadi

İlgili konular