আমি ডকার রচনাটিতে একটি ভলিউম হিসাবে কোনও হোস্ট ডিরেক্টরিকে কীভাবে মাউন্ট করব


125

আমার একটি বিকাশের পরিবেশ রয়েছে যা আমি ডকরিজিং করছি এবং আমি ডকার চিত্রগুলি পুনর্নির্মাণ না করে আমার পরিবর্তনগুলি লাইভলোড করার ক্ষমতা চাই। আমি ডকার কম্পোজ ব্যবহার করছি কারণ রেডিস আমার অ্যাপের অন্যতম নির্ভরতা এবং আমি একটি রেডিস পাত্রে লিঙ্ক করতে সক্ষম হতে চাই

আমার মধ্যে দুটি ধারক সংজ্ঞায়িত করা হয়েছে docker-compose.yml:

node:
    build: ./node
    links:
        - redis
    ports:
        - "8080"
    env_file:
        - node-app.env

redis:
    image: redis
    ports:
        - "6379"

আমি আমার nodeঅ্যাপ্লিকেশনটির ডকফায়িলের পয়েন্টে পৌঁছেছি যেখানে আমি একটি ভলিউম যুক্ত করেছি, তবে আমি কীভাবে হোস্টের ডিরেক্টরিটি ভলিউমে মাউন্ট করব যাতে কোডটিতে আমার সমস্ত লাইভ সম্পাদনাগুলি পাত্রে প্রতিবিম্বিত হয়?

এখানে আমার বর্তমান ডকফাইল:

# Set the base image to Ubuntu
FROM    node:boron

# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>

# 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"]

আমার প্রকল্পটি এর মতো দেখাচ্ছে:

/
- docker-compose.yml
- node-app.env
- node/
  - app.js
  - Dockerfile.js

উত্তর:


137

তাদের ডকুমেন্টেশন চেকআউট

এর চেহারা থেকে আপনি নিম্নলিখিতটি আপনার ডকার-কম্পোজ.আইএমএলে করতে পারেন

volumes:
    - ./:/app

2
এটি চেষ্টা করেও এটি কার্যকর হয়নি:Error: Cannot find module '/data/app.js'
আমিন শাহ গিলানি

2
অপেক্ষা করুন .. আপনার ভলিউম এবং ওয়ার্কডির /app/কেন আপনার সিএমডি ইশারা করছে/data
jkris

1
এটি একটি ত্রুটি ছিল! এটি ধরার জন্য আপনাকে ধন্যবাদ! স্থির, এবং এখন আমি পেয়ে Error: Cannot find module 'express'যাচ্ছি এখন আমি কয়েকটি জিনিস চেষ্টা করব।
আমিন শাহ গিলানী

3
উইন্ডোজ পাত্রে, আপনি উইন্ডোজ স্টাইলের মতো পথটি চান - .:c:/app(এটি আমাকে
ছড়িয়ে

86

কয়েকটি অপশন আছে

শর্ট সিনট্যাক্স

host : guestবিন্যাসটি ব্যবহার করে আপনি নিম্নলিখিত যে কোনও একটি করতে পারেন:

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql

  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql

  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache

  # User-relative path
  - ~/configs:/etc/configs/:ro

  # Named volume
  - datavolume:/var/lib/mysql

দীর্ঘ সিনট্যাক্স

ডকার-রচনা v3.2 হিসাবে আপনি দীর্ঘ বাক্য গঠন ব্যবহার করতে পারেন যা অতিরিক্ত ক্ষেত্রগুলির কনফিগারেশনকে মঞ্জুরি দেয় যা সংক্ষিপ্ত আকারে প্রকাশ করা যায় যেমন mount type(ভলিউম, বাইন্ড বা tmpfs) এবং read_only

version: "3.2"
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

networks:
  webnet:

volumes:
  mydata:

পরীক্ষা করে দেখুন https://docs.docker.com/compose/compose-file/#long-syntax-3 আরও তথ্যের জন্য।


21

আপনি যদি কোনও নির্দিষ্ট হোস্ট ডিরেক্টরিটি ( /disk1/prometheus-dataনিম্নলিখিত উদাহরণে) volumesডকার কমপোজ ওয়াইএএমএল ফাইলের বিভাগে একটি ভলিউম হিসাবে মাউন্ট করতে চান , আপনি নীচের মতো এটি করতে পারেন, যেমন:

version: '3'

services:
  prometheus:
    image: prom/prometheus
    volumes:
      - prometheus-data:/prometheus

volumes:
  prometheus-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /disk1/prometheus-data

যাইহোক, প্রমিথিয়াসের ডকফাইফিলে আপনি VOLUMEনীচের মতো নির্দেশিকাটি পেতে পারেন যা এটিকে নেটিভ হোস্ট ইত্যাদি থেকে বাহ্যিকভাবে মাউন্ট করা ভলিউম হিসাবে চিহ্নিত করে (তবে নোট করুন: কোনও ধারককে একটি ভলিউম মাউন্ট করার পরেও এই নির্দেশনা আবশ্যক নয়) :

Dockerfile

...
VOLUME ["/prometheus"]
...

refs:


এটি কাজ করে। ধন্যবাদ। localড্রাইভার প্রকারের জন্য ডকুমেন্টেশন কোথায় ?
মেল মেল

@ এমএমএল ডকুমেন্টেশনটি প্রথম রেফার্স লিঙ্ক ( ডকস.ডোকার.কম্পোজ / কমপোস-ফাইল / # ড্রাইভার) এতে লেখা হয়েছে: এই ভলিউমের জন্য কোন ভলিউম ড্রাইভারটি ব্যবহার করা উচিত তা নির্দিষ্ট করুন। ডকার ইঞ্জিনটি ব্যবহারের জন্য কনফিগার করা হয়েছে এমন কোনও ড্রাইভারের ডিফল্ট, যা বেশিরভাগ ক্ষেত্রেlocal
ইউসি

1
: @mmell, আপনি এই প্রশ্নটি থেকে আরো বিস্তারিত জানতে পারেন stackoverflow.com/questions/42195334/...
Yuci

আপনি কীভাবে সেটিংস জানেন driver_opts: o: bind type: none?
মেল মেল

1
@ মেল মূলত, এই বিকল্পগুলি ড্রাইভার-নির্ভর, এবং localলিনাক্সের অন্তর্নির্মিত ড্রাইভারগুলি লিনাক্স মাউন্ট কমান্ডের অনুরূপ বিকল্পগুলি গ্রহণ করে: man7.org/linux/man-pages/man8/mount.8.html । আপনি এতে আরও আলোচনা জানতে পারেন github.com/moby/moby/issues/19990#issuecomment-248955005 এবং stackoverflow.com/questions/35841241/...
Yuci

9

এটি দুটি জিনিস ছিল:

আমি ভলিউম এতে যুক্ত করেছি docker-compose.yml:

node:
    volumes:
        - ./node:/app

আমি npm install && nodemon app.jsটুকরোগুলিকে একটিতে সরিয়ে নিয়েছি CMDকারণ RUNইউনিয়ন ফাইল সিস্টেমে জিনিস যুক্ত হয়েছে, এবং আমার ভলিউম ইউএফএসের অংশ নয়।

# Set the base image to Ubuntu
FROM    node:boron

# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>

# Install nodemon
RUN npm install -g nodemon

# Add a /app volume
VOLUME ["/app"]

# Define working directory
WORKDIR /app

# Expose port
EXPOSE  8080

# Run npm install
CMD npm install && nodemon app.js

2

আমরা আছে তৈরি আপনার নিজের Docker ভলিউম সঙ্গে ম্যাপ হোস্ট ডিরেক্টরিতে আগে আমরা উল্লেখ মধ্যে Docker-compose.yml যেমন বাহ্যিক

1. ভলিউম নাম শেয়ার করুন

docker volume create --driver local \
    --opt type=none \
    --opt device=/home/mukundhan/share \
    --opt o=bind share

এটি আপনার ডকার-রচনায় ব্যবহার করুন

version: "3"

volumes:
  share:
    external: true

services:
  workstation:
    container_name: "workstation"
    image: "ubuntu"
    stdin_open: true
    tty: true
    volumes:
      - share:/share:consistent
      - ./source:/source:consistent
    working_dir: /source
    ipc: host
    privileged: true
    shm_size: '2gb'
  db:
    container_name: "db"
    image: "ubuntu"
    stdin_open: true
    tty: true
    volumes:
      - share:/share:consistent
    working_dir: /source
    ipc: host

এই পদ্ধতিতে আমরা বিভিন্ন ধারকগুলিতে চলমান অনেক পরিষেবাগুলির সাথে একই ডিরেক্টরিটি ভাগ করতে পারি


আমার আইপিসি: হোস্ট কেন লাগবে?
ওয়াহিদ নূরফফিদি

এটি কেবল তখনই প্রয়োজন যখন আমাদের নেটওয়ার্কটিকে হোস্টের সাথে আবদ্ধ করতে হবে।
মুকুন্ধন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.