Skip to content

Setting Default Platform to linux/amd64 on macOS Docker

When using Docker on Apple Silicon Macs (M1/M2 chips), you may encounter platform compatibility issues because Docker defaults to building and running containers for the arm64 architecture rather than the more widely supported amd64 architecture. This can cause problems when deploying containers to environments that expect the standard x86-64 architecture.

Why This Matters

Docker images built on Apple Silicon use ARM64 architecture by default, which can cause compatibility issues when:

  • Deploying to cloud platforms like AWS EC2, ECS, or ECR
  • Sharing images with team members using Intel-based systems
  • Using images that don't have multi-architecture support
  • Running software with platform-specific dependencies

The most straightforward approach is to set the DOCKER_DEFAULT_PLATFORM environment variable:

bash
export DOCKER_DEFAULT_PLATFORM=linux/amd64

Add this line to your shell configuration file:

  • For bash: ~/.bashrc or ~/.bash_profile
  • For zsh: ~/.zshrc

This setting will apply to all subsequent Docker commands in your terminal session.

Solution 2: Shell Function Wrapper

For more control, create a shell function that automatically adds the platform flag:

bash
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
}

Add this function to your shell configuration file. It will only apply the platform flag when running on Apple Silicon and only for build and run commands.

Solution 3: Docker Compose Configuration

For projects using Docker Compose, specify the platform in your docker-compose.yml file:

yaml
services:
  your_service:
    platform: linux/amd64
    build: .
    # other configuration

Solution 4: Dockerfile Specification

You can also specify the platform directly in your Dockerfile:

dockerfile
FROM --platform=linux/amd64 python:3.7-alpine
# rest of your Dockerfile

This approach is particularly useful for multi-stage builds where you only need to specify the platform for the initial base image.

Solution 5: Command-Level Specification

For one-time use, specify the platform directly in your Docker commands:

bash
# For single images
docker build --platform linux/amd64 -t your-image .

# For docker compose
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose build

Important Considerations

WARNING

If you've previously built or pulled images without specifying the platform, Docker may continue using the cached ARM64 versions. Remove existing images with docker image rm your_image_name before rebuilding with the correct platform.

TIP

The DOCKER_DEFAULT_PLATFORM environment variable approach is generally recommended as it provides consistent behavior across all Docker commands without requiring changes to individual configuration files.

Verifying Platform

To confirm your containers are using the correct platform:

bash
docker run --rm your-image uname -m

This should return x86_64 (the architecture name for amd64) instead of arm64.

By implementing any of these solutions, you can ensure your Docker containers built on Apple Silicon Macs will be compatible with the broader x86-64 ecosystem used in most production environments.