ابزار داکر (Docker) به عنوان یکی از محبوبترین پلتفرمهای کانتینرسازی، امکانات متنوعی را برای مدیریت محیطهای ایزوله فراهم میکند. یکی از نیازهای رایج توسعهدهندگان و کاربران، جابهجایی فایلها و پوشهها بین فایلسیستم کانتینر و سیستم میزبان (Host) است. فرمان docker container cp یا به اختصار docker cp دقیقاً برای همین هدف طراحی شده است و به شما اجازه میدهد بدون نیاز به راهاندازی سرویسهای انتقال شبکه، فایلها را میان این دو محیط کپی کنید.
این فرمان مشابه دستور سنتی cp -a در سیستمعاملهای یونیکس عمل میکند و پوشهها را به صورت بازگشتی همراه با حفظ دسترسیها کپی میکند. در ادامهٔ این مقاله، نحوهٔ استفاده از این دستور، قوانین مسیردهی و نکات کلیدی آن را بر اساس مستندات رسمی بررسی میکنیم.
قوانین مسیردهی و ساختار دستوری
ساختار پایهٔ این دستور شامل مشخص کردن مبدأ (SRC_PATH) و مقصد (DEST_PATH) است. شما میتوانید فایلها را از کانتینر به ماشین میزبان یا برعکس انتقال دهید. همچنین امکان استفاده از علامت خط تیره ( - ) برای ارسال یا دریافت آرشیو tar از طریق جریانهای استاندارد ورودی (STDIN) و خروجی (STDOUT) وجود دارد.
نکتهٔ مهم در مورد مسیرهای درون کانتینر این است که داکر فرض میکند مسیرهای کانتینر نسبت به دایرکتوری ریشه ( / ) سنجیده میشوند؛ بنابراین قرار دادن اسلش اولیه اختیاری است. مسیرهای سیستم میزبان نیز میتوانند به صورت مطلق یا نسبی نسبت به دایرکتوری جاری اجرا شوند. همچنین برای جدا کردن نام کانتینر و مسیر آن، از نویسهٔ دو نقطه ( : ) استفاده میشود.
نحوهٔ کپی کردن فایلها به درون و بیرون کانتینر
برای شروع انتقال، کانتینر میتواند در حالت در حال اجرا (Running) یا متوقفشده (Stopped) باشد. فرض کنید میخواهید یک فایل محلی را به داخل یک کانتینر منتقل کنید. دستور زیر این کار را با مشخص کردن مسیر مقصد در کانتینر انجام میدهد:
$ docker cp ./some_file CONTAINER:/work
در حالت عکس، اگر قصد داشته باشید پوشهای از گزارشها را از درون کانتینر به فضای ذخیرهسازی محلی خود بیاورید، از الگوی زیر استفاده میشود:
$ docker cp CONTAINER:/var/logs/ /tmp/app_logs
اگر مسیر مقصد وجود نداشته باشد و با اسلش تمام نشود، داکر آن را به عنوان یک فایل جدید ذخیره میکند. در صورتی که مقصد یک دایرکتوری موجود باشد، فایل یا پوشهٔ منبع در داخل آن قرار میگیرد.
سوئیچها و حالتهای پیشرفته
دستور docker cp دارای گزینههای کاربردی برای مدیریت دقیقتر فایلها است. سوئیچ -a یا همان حالت آرشیو (Archive mode)، تمام اطلاعات مربوط به شناسههای UID و GID را حفظ میکند. به صورت پیشفرض، فایلهای کپیشده به کانتینر با مالکیت کاربر ریشه ایجاد میشوند، اما با فعال کردن این سوئیچ مالکیت مبدأ حفظ میشود.
سوئیچ دیگری که در مستندات رسمی ذکر شده، -L است که باعث میشود دستور همیشه لینکهای نمادین (Symlinks) موجود در مسیر مبدأ را دنبال کند و خود هدف را کپی نماید. همچنین سوئیچ -q برای متوقف کردن خروجی پیشرفت کار در ترمینال کاربرد دارد.
نکات ایمنی، محدودیتها و عیبیابی
برخی پروندههای سیستمی خاص مانند فایلهای موجود در پوشههای /proc ، /sys ، /dev ، tmpfs و مانتهای ایجاد شده توسط کاربر در کانتینر قابل کپی کردن مستقیم با این دستور نیستند. با این حال، اگر نیاز به دسترسی به این موارد داشته باشید، میتوانید با اجرای دستی ابزار tar به کمک docker exec این محدودیت را دور بزنید.
هنگام کار با این ابزار همواره مطمئن شوید که مسیرهای مبدأ و مقصد به درستی تعریف شدهاند تا از خطاهای رایج مقصد دایرکتوری ناموجود جلوگیری شود. بررسی خروجی ترمینال و رعایت اصول دسترسی فایلها به پایداری فرایند کمک میکند.
فیسیت مسئولیتی در قبال تصمیم به خرید و فروش در هیچکدام از بسترهای اینترنتی ندارد.
هوش فیسیت · از این مطلب بپرس
بعد از خواندن مطلب بپرسید؛ پاسخ فقط از همین مقاله است.
این مطلب برایتان مفید بود؟
رایان جهانی خبرنگار موبایل، کامپیوتر و گجت فیسیت است. گوشی، لپتاپ، قطعه و گجت را پوشش میدهد و مشخصات روی کاغذ را با واقعیت بازار ایران میسنجد؛ عدد بنچمارک را بدون قیمت، گارانتی و کاربرد روزمره رها نمیکند.
علاقهاش به این است که بفهمد یک دستگاه در دست کاربر چطور کار میکند، نه فقط روی اسلاید رونمایی. خبر معرفی و مقایسهٔ مدلهای موبایل و سختافزار را معمولاً او مینویسد.
آموزش اتصال به کانتینر در حال اجرا با docker attach؛ راهنمای گامبهگام و کلید خروج امن
آموزش مشاهده لاگ در Docker Compose با گزینههای logs، tail و follow
آموزش دستور kill در لینوکس؛ بستن فرایندها با سیگنالهای TERM و KILL
فایل compose.yaml را درست بنویسید؛ ساختار دو سرویس، پورت و متغیر محیطی با نمونهٔ رسمی













نظرات کاربران