ডকফাইফাইল কপি সাব-ডিরেক্টরি ডিরেক্টরি রাখে


257

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

ফাইলগুলি এরকম:

folder1
    file1
    file2
folder2
    file1
    file2

আমি অনুলিপিটি তৈরি করার চেষ্টা করছি:

COPY files/* /files/

যাইহোক, সমস্ত ফাইল / ফাইলগুলিতে স্থাপন করা হয় / উপ-ডিরেক্টরি কাঠামো বজায় রাখার পাশাপাশি ফাইলগুলি তাদের ডিরেক্টরিতে অনুলিপি করার কোনও উপায় কি ডকারে রয়েছে?


1
আপনি কী ফলাফল পেয়েছেন এবং কোন ফলাফলের প্রত্যাশা করেছেন তা আপনি পরিষ্কার করে বলতে পারেন?
— থমাসলেভিল

উত্তর:


413

এই ডকফায়াইল দিয়ে কপি থেকে তারকা সরান:

FROM ubuntu
COPY files/ /files/
RUN ls -la /files/*

কাঠামোটি এখানে রয়েছে:

$ docker build .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu
 ---> d0955f21bf24
Step 1 : COPY files/ /files/
 ---> 5cc4ae8708a6
Removing intermediate container c6f7f7ec8ccf
Step 2 : RUN ls -la /files/*
 ---> Running in 08ab9a1e042f
/files/folder1:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2

/files/folder2:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2
 ---> 03ff0a5d0e4b
Removing intermediate container 08ab9a1e042f
Successfully built 03ff0a5d0e4b

64
তবে আমার মতো কিছু ফাইলের দরকার হলে কী হবে COPY files/*1 /files/?
— পাভেল আগারকোভ

1
এটিও কি সেই ডিরেক্টরিতে বিদ্যমান ফাইলগুলি ওভাররাইট করে?
— চ্যান্ডার

1
@ চ্যাণ্ডার, হ্যাঁ, বিদ্যমান ফাইলগুলি ওভাররাইট করা হবে
— ইসানাইচ

4
এটি লক্ষণীয় গুরুত্বপূর্ণ যে এখানে সিক্রেট সসটি হ'ল এখানে একটি উত্স ডিরেক্টরি এবং এক লক্ষ্য ডিরেক্টরি নির্দিষ্ট রয়েছে। অন্য কোনও সংমিশ্রণ উত্স ডিরেক্টরি (ies) এর বিষয়বস্তু লক্ষ্য ডিরেক্টরিতে অনুলিপি করে।
— মার্সিন

RUN ls -la /files/*এর কনসোল আউটপুট থেকে আমি সরাসরি আউটপুট দেখতে সক্ষম হইনি docker build। সুতরাং আমি পরিবর্তে সরাসরি কনটেইনারটিতে সরাসরি lsহোস্টে করতে গিয়েছিলামdocker exec -it <container name> /bin/bash
— ডাকনামাটি

32

বিকল্পভাবে আপনি একটি "" ব্যবহার করতে পারেন। * এর পরিবর্তে, কারণ এটি কার্যকরী ডিরেক্টরিতে সমস্ত ফাইল নেবে, ফোল্ডার এবং সাবফোল্ডার অন্তর্ভুক্ত করুন:

FROM ubuntu
COPY . /
RUN ls -la /

1
এর মধ্যে কি '.git' ডিরেক্টরির মতো লুকানো ফাইল এবং ডায়ার অন্তর্ভুক্ত থাকবে?
— ব্রুনো নেগ্রো জিকা

7
@ ব্রুনোনেগ্রোজিকা, আপনি অনুলিপি অপারেশন চলাকালীন কোন ফাইল / ফোল্ডারগুলি উপেক্ষা করতে চান তা নির্দিষ্ট করতে আপনি .dockerignore ফাইল ব্যবহার করতে পারেন। এটি দেরী হয়ে গেছে, তবে আশা করি এটি অন্য কারও জন্য সহায়ক হবে
— হেলরেন

22

কোনও স্থানীয় ডিরেক্টরি কোনও চিত্রের মধ্যে একটি ডিরেক্টরিতে একীভূত করতে , এটি করুন। এটি চিত্রের মধ্যে ইতিমধ্যে উপস্থিত ফাইলগুলি মুছবে না। এটি কেবলমাত্র স্থানীয়ভাবে উপস্থিত ফাইলগুলি যুক্ত করবে, একই নামের কোনও ফাইল ইতিমধ্যে উপস্থিত থাকলে চিত্রটিতে ফাইলগুলি ওভাররাইট করে।

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