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


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.