Skip to content

Commit 647ad07

Browse files
Add fix for running image on macbook m1/m2 (ARM) (#12)
1 parent 6f2e3e4 commit 647ad07

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

Makefile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,18 @@ deploy:
6060

6161
ssh:
6262
ssh root@`yq e '.all.children.webservers.hosts.web1.ansible_host' ansible/inventory.yml`
63+
64+
# Для запуска x86-образа на ARM (например, Mac M1/M2):
65+
# docker run --platform linux/amd64 -p 3000:3000 -e SERVER_MESSAGE="Hexlet Awesome Server" hexletcomponents/devops-example-app
66+
67+
multiarch-build-app:
68+
docker buildx build --platform linux/amd64,linux/arm64 -t hexletcomponents/devops-example-app .
69+
70+
multiarch-build-caddy:
71+
docker buildx build --platform linux/amd64,linux/arm64 -t hexletcomponents/devops-example-caddy -f services/caddy/Dockerfile .
72+
73+
multiarch-push-app:
74+
docker buildx build --platform linux/amd64,linux/arm64 -t hexletcomponents/devops-example-app --push .
75+
76+
multiarch-push-caddy:
77+
docker buildx build --platform linux/amd64,linux/arm64 -t hexletcomponents/devops-example-caddy -f services/caddy/Dockerfile --push .

README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,51 @@ docker run -p 3000:3000 -e SERVER_MESSAGE="Hexlet Awesome Server" -e ROLLBAR_TOK
1111
# open http://0.0.0.0:3000 in browser
1212
```
1313

14+
## Запуск на Mac M1/M2 (ARM) и других архитектурах
15+
16+
Если при запуске контейнера возникает ошибка:
17+
18+
```
19+
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.
20+
```
21+
22+
Возможные решения:
23+
24+
### 1. Использовать эмуляцию x86 через флаг --platform
25+
26+
```sh
27+
docker run --platform linux/amd64 -p 3000:3000 \
28+
-e SERVER_MESSAGE="Hexlet Awesome Server" \
29+
hexletcomponents/devops-example-app
30+
```
31+
32+
Docker Desktop для Mac M1/M2 поддерживает эмуляцию x86 (amd64) через QEMU. Это работает для большинства Node.js-приложений, но может быть медленнее.
33+
34+
### 2. Собрать образ локально под ARM
35+
36+
```sh
37+
docker build -t hexletcomponents/devops-example-app .
38+
docker run -p 3000:3000 \
39+
-e SERVER_MESSAGE="Hexlet Awesome Server" \
40+
hexletcomponents/devops-example-app
41+
```
42+
43+
### 3. Собрать и опубликовать multi-arch образ (рекомендовано)
44+
45+
```sh
46+
docker buildx build --platform linux/amd64,linux/arm64 -t hexletcomponents/devops-example-app --push .
47+
```
48+
49+
После этого команда `docker run ...` будет работать на любой архитектуре.
50+
51+
### 4. Проверить, что эмуляция включена
52+
53+
Если эмуляция не работает, выполните:
54+
55+
```sh
56+
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
57+
```
58+
1459
## Requirements
1560

1661
* Make

0 commit comments

Comments
 (0)