डॉकर के वर्तमान बीटा संस्करण के लिए आपको हर बार build या run एक amd64 छवि/कंटेनर की आवश्यकता होने पर एक --platform=linux/amd64 निर्दिष्ट करने की आवश्यकता होती है।

दस्तावेज़ीकरण का उल्लेख है

मल्टी-आर्किटेक्चर सपोर्ट वाली इमेज चलाते समय, docker स्वचालित रूप से इमेज वैरिएंट का चयन करेगा जो आपके OS और आर्किटेक्चर से मेल खाता हो।

दस्तावेज़ीकरण env चरों का उपयोग करके इस स्वचालित व्यवहार को बदलने का कोई तरीका निर्दिष्ट नहीं करता है। ऐसा लगता है कि दोनों BUILDPLATFORM और TARGETPLATFORM को अनदेखा कर रहे हैं।

क्या सेब पर चल रहे macOS पर डिफ़ॉल्ट रूप से docker को build और run कमांड को एक प्लेटफॉर्म linux/amd64 के बजाय linux/arm64/v8 के साथ चलाने के लिए बाध्य करने का कोई अन्य तरीका है- सिलिकॉन?

6
Vojtech Letal 7 जिंदा 2021, 15:29

2 जवाब

सबसे बढ़िया उत्तर

आप पर्यावरण चर DOCKER_DEFAULT_PLATFORM सेट कर सकते हैं

export DOCKER_DEFAULT_PLATFORM=linux/amd64  
12
Beppe C 1 अप्रैल 2021, 11:23
इसे 03/2019 में v19.03.0 में पेश किया गया था। मुझे समझ में नहीं आता कि मैं इसे कैसे चूक गया।
 – 
Vojtech Letal
18 मई 2021, 21:19

यदि आप मेरे जैसे हैं, और यहां आए हैं क्योंकि Apple सिलिकॉन (या अन्य ARM64 आधारित आर्किटेक्चर) के साथ निर्मित डॉकटर छवियां लिनक्स या विंडोज आधारित AMD64 वातावरण (जैसे AWS EC2, ECS, आदि) के लिए छवियों को तैनात करते समय समस्याएँ पैदा करती हैं। उदाहरण के लिए , आप M1 चिप पर बनी अपनी डॉकटर छवि को AWS ECR रिपॉजिटरी में अपलोड करने का प्रयास कर सकते हैं और यह चलने में विफल हो जाती है। इसलिए, आपको एआरएम 64 आर्किटेक्चर पर एएमडी 64 आधारित छवियों को बनाने का एक तरीका चाहिए, चाहे वह डॉकर बिल्ड (व्यक्तिगत छवियों के लिए) या डॉकर-कंपोज़ बिल्ड (उदाहरण के लिए डॉकर कंपोज़ नेटवर्क में चलने वाले मल्टी-इमेज ऐप्स के लिए) का उपयोग कर रहा हो।

सिंगल डॉकर इमेज बनाने के लिए: कमांड लाइन का उपयोग करके अपना पर्यावरण चर सेट करें या स्वीकृत उत्तर में सुझाए गए अनुसार अपनी .bashrc या .zshenv फ़ाइल को संशोधित करें (यानी निर्यात DOCKER_DEFAULT_PLATFORM=linux/amd64)।

वैकल्पिक रूप से, Dockerfile में, FROM कमांड में निम्न ध्वज शामिल करें (एक बहु-चरण Dockerfile निर्माण के लिए, ध्वज केवल पहले चरण के लिए आवश्यक है):
--प्लेटफ़ॉर्म=लिनक्स/amd64

(उदाहरण के लिए --platform=linux/amd64 python:3.7-alpine से)

डॉकर-कंपोज़ बिल्ड के हिस्से के रूप में छवियों के निर्माण के लिए, प्रत्येक सेवा के लिए मंच शामिल करें। उदाहरण के लिए:

docker-compose.yml
सेवाएं:
दृश्यपटल:
प्लेटफ़ॉर्म: linux/amd64
बिल्ड: फ्रंटएंड
बंदरगाह:
- 80:80
निर्भर करता है:
- बैकएंड
बैकएंड:
प्लेटफ़ॉर्म: linux/amd64
निर्माण: बैकएंड

0
WildGoose 19 अक्टूबर 2021, 23:50