도커가 macOS에서 기본적으로 Linux/amd64 플랫폼을 사용하도록 강제 설정
도커의 현재 베타 버전을 지정해야 합니다.--platform=linux/amd64
필요할 때마다build
또는run
amd64 이미지/이미지
설명서에는 다음과 같은 내용이 나와 있습니다.
멀티 아키텍처를 지원하는 이미지를 실행할 때 도커는 OS 및 아키텍처와 일치하는 이미지 변형을 자동으로 선택합니다.
설명서에는 환경 변수를 사용하여 이 자동 동작을 변경하는 방법이 명시되어 있지 않습니다.BUILDPLATFORM과 TARGETPLATFORM을 모두 무시하는 것 같습니다.
다른 방법은 없나요?docker
전부 다build
그리고.run
플랫폼이 있는 명령linux/amd64
대신에linux/arm64/v8
애플 실리콘에서 실행되는 맥OS에서 기본적으로?
환경 변수를 설정할 수 있습니다.DOCKER_DEFAULT_PLATFORM
:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
Apple Silicon(또는 다른 ARM64 기반 아키텍처)으로 구축된 도커 이미지는 Linux 또는 Windows 기반 *AMD64 환경(예: AWS EC2, ECS 등)에 이미지를 배포할 때 문제를 일으킬 수 있습니다.예를 들어 M1 칩에서 만든 도커 이미지를 AWS ECR 저장소에 업로드하려고 하면 실행에 실패할 수 있습니다.따라서 ARM64 아키텍처에서 Docker 빌드(개별 이미지용)를 사용하든 AMD64 기반 이미지를 구축할 수 있는 방법이 필요합니다.docker-compose
빌드(예: 도커 합성 네트워크에서 실행되는 다중 이미지 앱)
단일 도커 이미지를 작성하는 경우:명령줄을 사용하여 환경 변수를 설정하거나 환경 변수를 수정합니다..bashrc
또는.zshenv
승인된 답변에 제시된 대로 파일을 작성합니다.
export DOCKER_DEFAULT_PLATFORM=linux/amd64
또는 에Dockerfile
다음 플래그를 포함합니다.FROM
명령(다단계의 경우)Dockerfile
빌드, 플래그는 첫 번째 단계에만 필요합니다):
FROM --platform=linux/amd64 python:3.7-alpine
의 일부로 이미지를 빌드하는 경우docker-compose
빌드, 포함platform: linux/amd64
각 서비스에 대해야 합니다.예:
services:
frontend:
platform: linux/amd64
build: frontend
ports:
- 80:80
depends_on:
- backend
backend:
platform: linux/amd64
build: backend
답변 중 하나에서 언급한 것처럼 env 변수를 내보낼 필요는 없습니다. 다음을 수행하여 명령의 일부로 한 번만 실행할 수 있습니다.
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose build
다른 플랫폼에 대한 이미지를 이미 다운로드한 경우 기본 플랫폼으로 지정한 플랫폼에 관계없이 도커는 해당 이미지를 계속 사용합니다.docker image rm your_img
그것을 고치기 위해 먼저.
설정할 수 있습니다.
export DOCKER_DEFAULT_PLATFORM=linux/amd64
Mac M1용 .zshrc 파일의 경우
사용할 수 있습니다.buildx
(mobi) 플랫폼을 위한 sui port cli.
docker buildx build --platform linux/amd64 .
당신은 당신의 에추할수를 할 수 .docker-compose.yaml
:
services:
service_name:
environment:
- DOCKER_DEFAULT_PLATFORM=linux/amd64
이 스냅샷을 ~/.zshrc 및 ~/.bashrc에 추가합니다.도커 실행 명령을 수행할 때마다 플래그를 반복할 수 없습니다.
# useful only for Mac OS Silicon M1,
# still working but useless for the other platforms
docker() {
if [[ `uname -m` == "arm64" ]] && [[ "$1" == "run" || "$1" == "build" ]]; then
/usr/local/bin/docker "$1" --platform linux/amd64 "${@:2}"
else
/usr/local/bin/docker "$@"
fi
}
언급URL : https://stackoverflow.com/questions/65612411/forcing-docker-to-use-linux-amd64-platform-by-default-on-macos
'programing' 카테고리의 다른 글
터미널을 통해 OS X의 adb에 액세스할 수 없습니다. "명령을 찾을 수 없습니다." (0) | 2023.08.11 |
---|---|
자바스크립트에서 서버를 ping할 수 있습니까? (0) | 2023.08.11 |
sufficialize.js 타임스탬프가 DATTIME이 아닙니다. (0) | 2023.08.11 |
동기화 시 MariaDB / Sequetize SQL 구문 오류 발생 (0) | 2023.08.11 |
고유한 url-frinly 경로를 생성하는 루프 (0) | 2023.08.11 |