يجب أن يذهب دون أن يقول أنه في نظام المضيف الخاص بي ، تحت دليل "/ سرف / الزوار" ، هناك بالفعل شفرة المصدر الخاصة بي:
[root@V12 visitor]# ls /srv/visitor/Dockerfile package.json visitor.js
الآن ، عندما أحاول بناء صورة باستخدام هذا دوكيرفيل فإنه يعلق في الخطوة عندما" نسخة " من المفترض أن يحدث:
Step 10 : COPY /srv/visitor /srv/visitorINFO[0155] srv/visitor: no such file or directory
تقول أنه لا يوجد مثل هذا الدليل ، ولكن هناك بوضوح.
أي أفكار?
تحديث 1:
وقد أشير لي أنني كنت مخطئا ، في الطريقة التي فهمت بناء السياق. كان الاقتراح بمثابة تغيير عبارة" نسخة " إلى هذا:
COPY . /srv/visitor
المشكلة هي أنني حصلت عليها بهذه الطريقة ، وتوقفت عملية البناء في الخطوة التالية:
RUN npm install
وقال شيئا على غرار " لا حزمة.العثور على ملف جسون " ، عندما يكون هناك بوضوح واحد.
تحديث 2:
حاولت تشغيله مع هذا التغيير في دوكيرفيل:
COPY source /srv/visitor/
توقفت عند محاولة تشغيل الآلية الوقائية الوطنية:
Step 12 : RUN npm install ---> Running in ae5e2a993e11npm ERR! install Couldn't read dependenciesnpm ERR! Linux 3.18.5-1-ARCHnpm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install"npm ERR! node v0.10.36npm ERR! npm v2.5.0npm ERR! path /package.jsonnpm ERR! code ENOPACKAGEJSONnpm ERR! errno 34npm ERR! package.json ENOENT, open '/package.json'npm ERR! package.json This is most likely not a problem with npm itself.npm ERR! package.json npm can't find a package.json file in your current directory.npm ERR! Please include the following file with any support request:npm ERR! /npm-debug.logINFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34
وبالتالي, وقد تم تنفيذ نسخة? إذا كانت الإجابة بنعم ، لماذا الآلية الوقائية الوطنية غير قادر على العثور على الحزمة.جسون?
ال <src> المسار يجب أن يكون داخل سياق البناء؛ لا يمكنك نسخ ../ شيء / شيء ، لأن الخطوة الأولى من بناء عامل الميناء هو إرسال دليل السياق (والدلائل الفرعية) إلى الخفي عامل الميناء.
عند استخدام /srv/visitor أنت تستخدم مسارا مطلقا خارج سياق الإنشاء حتى لو كان الدليل الحالي بالفعل.
كنت أواجه هذه المشكلة ووجدت أنني تمكنت من إضافة سياق إلى متغير البناء من أجل تحميل ملف(ملفات) دوكيرفيل من الدلائل الأخرى. هذا سمح لي بتغيير بنية ملف عامل الميناء الافتراضي الخاص بي أكثر قليلا حسب رغبتي. هنا مقتطف من بلدي عامل الميناء يؤلف.يمل:
كما ذكر كزافييه لوكاس [مفيدة للغاية] الجواب ، لا يمكنك استخدام نسخ أو إضافة من دليل خارج سياق البناء الخاص بك (المجلد الذي تقوم بتشغيل "بناء عامل الميناء" من ، يجب أن يكون نفس الدليل الخاص بك .دوكيرفيل). حتى إذا حاولت استخدام ارتباط رمزي، فلن يعمل.
ملاحظة: هذا هو محدد ل بوسيكس (لينكس ، يونكس ، ماك ، وربما لينكس النظام الفرعي ويندوز). قد تكون قادرة على القيام مماثلة في ويندوز باستخدام تقاطع.
cd ~/your_docker_project/cp -al /subfolder/src_directory ./echo "COPY src_directory /subfolder/" >> Dockerfile
خطر: استخدام هذا سيجعل مشروع عامل الميناء الخاص بك محددة للمضيف. أنت تقريبا لا تريد أن تفعل هذا! التعامل مع الرعاية.
التطبيق: التعلم والتجريب في بيئة التطوير
هذا لم خدعة بالنسبة لي. كب - آل نسخ بنية الدليل ويجعل الروابط الصلبة لجميع الملفات. عند الانتهاء من تشغيل " جمهورية مقدونيا-الترددات اللاسلكية ./ صرك_دليل " لإزالته.
حدث هذا لي عند محاولة تشغيل ملف عامل الميناء من دليل مختلف.
كان لي COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory وتمكنت من حل هذا عن طريق تحديد ملف عامل الميناء.
تشغيل docker build . -f docker/development/Dockerfile عملت.
لكن الجري Runningعامل الميناء بناء عامل الميناء / التنمية` دوكيرفيل ' تسبب هذه المشكلة.
-f أو --file لتحديد اسم وموقع Dockerfile.
وجدت أنه من الغريب في البداية لأنه عندما كان لي Dockerfile في الدليل الجذر تطبيقات عملت بشكل جيد. وهذا سوف يساعد إذا كنت ترغب في إدارة الملفات عامل الميناء البيئة الخاصة بك أفضل قليلا.
وأخيرا حل هذه المشكلة في حالتي كان دوكيرفيل الذي ينفذ نسخة كان في مستوى أعمق من project.So أدركت أن مسار بناء المضيف يتم التعبير عنه بالنسبة لموقع ملف دوكيرفيل.