programing

도커가 macOS에서 기본적으로 Linux/amd64 플랫폼을 사용하도록 강제 설정

cafebook 2023. 8. 11. 22:35
반응형

도커가 macOS에서 기본적으로 Linux/amd64 플랫폼을 사용하도록 강제 설정

도커의 현재 베타 버전을 지정해야 합니다.--platform=linux/amd64필요할 때마다build또는runamd64 이미지/이미지

설명서에는 다음과 같은 내용이 나와 있습니다.

멀티 아키텍처를 지원하는 이미지를 실행할 때 도커는 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

반응형