Docker RUN: не удалось разрешить процесс при попытке создать файл Dockerfile

Я пытаюсь создать Dockerfile с содержимым ниже:

FROM openjdk:8-jdk-alpine

# working directory 
WORKDIR /opt

# create directory for gatling install
RUN mkdir -p dir

# install
RUN apk add --update wget bash libc6-compat && \
mkdir -p /tmp/downloads && \
wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip && \
mkdir -p /tmp/archive && \
cd /tmp/archive && \
unzip /tmp/downloads/file.zip && \
mv /tmp/archive/file/* /opt/file/ && \
rm -rf /tmp/*

# change context to file directory
WORKDIR  /opt/file

# set directories below to be mountable from host
VOLUME ["/opt/file/conf", "/opt/file/results", "/opt/file/user-files"]

# set environment variables
ENV PATH /opt/path
ENV HOME /opt/HOME

ENTRYPOINT ["execScript.sh"]

Когда я запускаю эту команду: sudo docker build -t tag:name . я получил ошибку ниже:

ERROR: failed to solve: process "RUN apk add --update wget bash libc6-compat && \
mkdir ..." did not complete successfully: exit code: 139

Я использую чип Apple Mac M1, Arm64. Как мне решить эту проблему?

Отредактировано: я немного подправил, добавив RUN к каждой строке, оказалось, что ошибочной строкой была wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip, регистрация была:

Dockerfile:22
--------------------
  20 |     RUN apk add --update wget bash libc6-compat
  21 |     RUN mkdir -p /tmp/downloads 
  22 | >>> RUN wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip
  23 |     RUN mkdir -p /tmp/archive 
  24 |     RUN cd /tmp/archive
--------------------
ERROR: failed to solve: process "/bin/sh -c wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip" did not complete successfully: exit code: 139

Дальнейшая отладка путем перехода непосредственно в докер с помощью docker exec -it id sh, я получаю эту ошибку при повторном запуске всей команды:

/bin/sh -c wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip

Оказывается, wget не может обнаружить всю часть -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip в своей команде. Я пытался поставить эту команду wget в двойные галочки, но бесполезно. Как отключить /bin/sh -c ?

Ошибка 139 — это ошибка сегментации. Попробуйте нажать BUILDKIT_PROGRESS=plain sudo docker build -t tag:name ., чтобы получить журнал в более простом формате, который позволит вам увидеть причину этого.

Hans Kilian 27.03.2024 09:16
1.220 (9/9) Installing wget (1.20.3-r0) 1.249 Executing busybox-1.29.3-r10.trigger 1.252 OK: 111 MiB in 61 packages 1.686 Segmentation fault @HansKilian, не мог бы ты взглянуть?
TriNguyen 27.03.2024 09:23

Имейте в виду, что базовому изображению пять лет. Вы уверены, что хотите использовать такое устаревшее изображение?

Nico Haase 27.03.2024 09:33

@NicoHaase сейчас я просто хочу сделать демо-версию, прежде чем смогу обновить ее версию, так что да...

TriNguyen 27.03.2024 09:34

Как и Нико, я подозреваю, что ваша проблема может быть связана с возрастом изображения. Я пытался найти другое изображение, которое вы могли бы использовать. Можете ли вы попробовать переключиться на openjdk:19-jdk-alpine и посмотреть, поможет ли это? Это самое новое изображение Alpine, которое я смог найти. Последние версии JDK недоступны в версии Alpine. Кроме того, изображения OpenJDK выглядят устаревшими согласно hub.docker.com/_/openjdk

Hans Kilian 27.03.2024 09:41

@HansKilian Я немного подправил и понял, что проблема в строке wget, но попробуйте verbose показать только то, что соединение успешно установлено, и ничего больше, можете ли вы взглянуть на это? jdk все еще работает, но да, я изменю версию, как только это пройдет

TriNguyen 27.03.2024 09:53

Почему бы не разделить строки для дальнейшей отладки? Что вы подразумеваете под «ничего другого»? Пожалуйста, добавьте все пояснения к вашему вопросу, отредактировав его.

Nico Haase 27.03.2024 11:12

@NicoHaase Я обновил вопрос, посмотрите его.

TriNguyen 28.03.2024 01:55

«wget не может прочитать флаг» — что это значит?

Nico Haase 28.03.2024 08:22

@NicoHaase wget не может быть выполнен, извините за плохой английский. wget не может обнаружить параметры, указанные в командной строке. -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip эта часть не обнаружена.

TriNguyen 28.03.2024 09:20

«невозможно обнаружить URL» — что это значит? Вы столкнулись с каким-либо сообщением об ошибке, которым вы могли бы поделиться? Также, насколько я вижу, эта проблема еще не связана с программированием

Nico Haase 28.03.2024 09:29

Давайте продолжим обсуждение в чате.

TriNguyen 28.03.2024 09:37
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
12
530
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас есть пробелы после косых черт, удалите их.

ОБНОВЛЕНИЕ: проверял с помощью мобильного телефона, и после && \ в конце строки показывалось пробел. Это распространенная ошибка, приводящая к такого рода ошибкам.

Проверяя на рабочем столе, я не вижу места и каких-либо проблем с командами, но лучше начать с отдельных команд RUN, чтобы вы могли определить конкретную команду, которая вызывает ошибку, поэтому в вашем случае вам следует начать с

RUN apk add --update wget bash libc6-compat
RUN mkdir -p /tmp/downloads
RUN wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip
RUN mkdir -p /tmp/archive
RUN cd /tmp/archive && unzip /tmp/downloads/file.zip
RUN mv /tmp/archive/file/* /opt/file/
RUN rm -rf /tmp/*

И если все хорошо, то объедините команды.

У меня нет места, только разрывная линия, это влияет на сценарий?

TriNguyen 27.03.2024 09:24

После каких слешей? Что заставляет вас думать, что это приводит к данному сообщению об ошибке?

Nico Haase 27.03.2024 09:32

Ваше «обновление» фактически аннулирует ответ и делает его бесполезным. Кроме того, недопустимое продолжение строки привело бы к концептуально другой ошибке, а не к сбою сегмента. Рассмотрите возможность его удаления.

STerliakov 27.03.2024 19:56
Ответ принят как подходящий

Оказывается, проблема возникает из-за использования чипа Mac Apple, который был заменен на ПК с Windows с использованием того же Dockerfile, созданного без проблем. Только обновлен openjdk:19-alpine, но 8-alpine все еще работает!

Другие вопросы по теме