Saya menggunakan docker-compose dan v3. Saya mencoba memasang volume di buruh pelabuhan:
./appdata:/appdata
Saya ingin ini sebagai volume dan kemudian mereferensikan volume itu dari beberapa wadah. The Volume konfigurasi referensi hanya menunjukkan data-volume:
sebagai volume bernama, dengan tidak ada nilai, sehingga tidak terlihat seperti di atas.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
Ini memberi saya:
GALAT: Dalam file './docker-compose.yml', volume 'app-volume' harus berupa pemetaan, bukan string.
Jelas saya tahu saya perlu mengubah pasangan volumes
kunci / nilai, tetapi saya tidak yakin bagaimana cara mengubahnya sehingga saya dapat berbagi volume antar layanan.
Saya juga telah memeriksa volumes_from
tetapi ini secara efektif hanya memungkinkan warisan dari penampung lain. Saya telah melihat seseorang menggunakan volumes_from
di wadah lain yang berisi pemetaan yang mereka inginkan, tetapi dengan command: true
mengatur agar wadah tidak pernah benar-benar berjalan, yang bagi saya hanya tampak seperti retasan.
Bagaimana saya bisa melakukan ini?
Catatan, saya tidak memiliki kerja sebagai berikut:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Tapi itu hanya duplikasi dan saya berharap volume bernama dapat membantu saya menghindari :-)
sumber
Jawaban:
Volume yang disebutkan dapat dibagikan di seluruh kontainer dengan cara berikut:
Berikut adalah contoh konfigurasi yang saya gunakan untuk pemahaman yang lebih baik. Saya mengekspos file statis yang dihasilkan dari
web
penampung saya ke volume bernamastatic-content
yang kemudian dibaca dan disajikan olehnginx
penampung:sumber
static_content
pada filesystem host?app-volume: location_in_the_container
salah./usr/src/app
di dalamnginx
container dan/usr/src/app/public
diweb
container sama-sama mendapatkan konten original, mana yang akan digunakan dan mengapa?collectstatic
dalam satu wadah dan ingin hasilnya tersedia di wadah lain, tetapi Anda tidak peduli dengan folder hostIni menyelesaikannya tanpa menggunakan volume bernama:
Jadi, ini terlihat seperti:
sumber
./appdata
, itulah yang saya coba lakukan. Tinggalkan jawaban ini di sini :) +1Volume buruh pelabuhan bernama telah dihapus mulai dari versi docker-compose 3.
Namun, Anda dapat menggunakan bidang ekstensi untuk menghindari sumber volume duplikat dan mencegah diri Anda dari kesalahan ketik di masa mendatang:
CATATAN: Fitur tersebut tersedia mulai dari format file versi 3.4.
sumber
volumes
bidang tingkat atas , tampaknya masih menjadi hal di v3docker-compose
.