Saya memiliki lingkungan pengembangan, saya sedang melakukan docker dan saya ingin kemampuan untuk memuat ulang perubahan saya tanpa harus membangun kembali gambar buruh pelabuhan. Saya menggunakan penulisan galangan kapal karena redis adalah salah satu dependensi aplikasi saya dan saya suka dapat menautkan penampung redis
Saya memiliki dua wadah yang ditentukan di saya docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Saya sudah sampai pada titik di node
file dok aplikasi saya di mana saya menambahkan volume, tetapi bagaimana cara memasang direktori host di volume sehingga semua pengeditan langsung saya pada kode tersebut tercermin dalam penampung?
Inilah Dockerfile saya saat ini:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <[email protected]>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN npm install
# Expose port
EXPOSE 8080
# Run app using nodemon
CMD ["nodemon", "/app/app.js"]
Proyek saya terlihat seperti ini:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
sumber
Error: Cannot find module '/data/app.js'
/app/
mengapa CMD Anda mengarah ke/data
Error: Cannot find module 'express'
saya akan mencoba beberapa hal sekarang.- .:c:/app
(ini membuat saya tersandung)Ada beberapa pilihan
Sintaks Pendek
Dengan menggunakan
host : guest
format tersebut, Anda dapat melakukan salah satu hal berikut:Sintaks Panjang
Pada docker-compose v3.2 Anda dapat menggunakan sintaks panjang yang memungkinkan konfigurasi bidang tambahan yang dapat diekspresikan dalam bentuk singkat seperti
mount type
(volume, bind atau tmpfs) danread_only
.Lihat https://docs.docker.com/compose/compose-file/#long-syntax-3 untuk info lebih lanjut.
sumber
Jika Anda ingin memasang direktori host tertentu (
/disk1/prometheus-data
dalam contoh berikut) sebagai volume divolumes
bagian file Docker Compose YAML, Anda dapat melakukannya seperti di bawah ini, misalnya:Ngomong-ngomong, di Dockerfile prometheus, Anda dapat menemukan
VOLUME
instruksi seperti di bawah ini, yang menandainya sebagai memegang volume yang dipasang secara eksternal dari host asli, dll. (Namun, perhatikan: instruksi ini bukan suatu keharusan untuk memasang volume ke dalam wadah.) :Dockerfile
Referensi:
sumber
local
tipe driver?local
driver_opts: o: bind type: none
?local
driver bawaan pada Linux menerima opsi yang mirip dengan perintah mount linux: man7.org/linux/man-pages/man8/mount.8.html . Anda dapat menemukan lebih banyak diskusi di github.com/moby/moby/issues/19990#issuecomment-248955005 , dan stackoverflow.com/questions/35841241/…Itu dua hal:
Saya menambahkan volume di
docker-compose.yml
:Saya memindahkan
npm install && nodemon app.js
potongan - potongan itu menjadiCMD
karenaRUN
menambahkan sesuatu ke Sistem File Union, dan volume saya bukan bagian dari UFS.sumber
kita harus membuat volume buruh pelabuhan Anda sendiri yang dipetakan dengan direktori host sebelum kami sebutkan di docker-compose.yml sebagai eksternal
1. Buat volume bernama share
2. Gunakan di docker-compose Anda
Dengan cara ini kita dapat berbagi direktori yang sama dengan banyak layanan yang berjalan di wadah berbeda
sumber