Сборка образа Dockerfile: «RUN wget» внутри Dockerfile приводит к частичной загрузке файла, но сборка завершается без ошибок - PullRequest
1 голос
/ 14 апреля 2020

Как указано в названии. Кроме того, тот же результат с curl, также тот же результат независимо от того, используется ли режим RUN в обычном режиме RUN против EXE C с wget и его аргументами внутри []

Контейнер создается без ошибок, и когда я запустите его через захват точки входа с bash Я вижу, что на самом деле было загружено всего несколько сотен байтов файла, а затем изнутри работающего контейнера я могу затем wget полный файл и запустить его.

Сделал много гуглят и больше ни с кем не видишь.
???

FROM ubuntu:18.04

RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes

RUN apt-get update \
    && apt-get install \
        ca-certificates \
        jq \
        git \
        curl\
        m4 \
        make \
        patch \
        libev-dev \
        libgmp-dev \
        libhidapi-dev \
        bubblewrap \
        zip \
        unzip \
        g++ \
        pkg-config

WORKDIR /azp

ENV DEBIAN_FRONTEND=noninteractive

RUN ["curl", "-s", "-o", "/usr/local/bin/opam", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]

RUN chmod a+x /usr/local/bin/opam

ENTRYPOINT ["bash"]

1 Ответ

1 голос
/ 14 апреля 2020

Проблема с командой curl здесь

RUN ["curl", "-s", "-o", "/usr/local/bin/opam", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]

Эта команда загружает страницу HTML вместо двоичного файла.

При выполнении подробного запроса вы можете видеть, что запрос перенаправляется

curl -v -o /usr/local/bin/opam https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux
...
> GET /ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux HTTP/1.1
> Host: github.com
> User-Agent: curl/7.64.1
> Accept: */*
> 
< HTTP/1.1 302 Found
< date: Tue, 14 Apr 2020 19:33:11 GMT
< content-type: text/html; charset=utf-8
< server: GitHub.com
< status: 302 Found
...

В таких случаях параметр -L должен быть передан в запрос curl

-L / - location (HTTP / HTTPS) Если сервер сообщает, что запрошенная страница перемещена в другое местоположение (указано заголовком Location: и кодом ответа 3XX), этот параметр заставит curl повторить запрос на новом месте.

Измените вашу команду curl как

RUN ["curl", "-sL", "-o", "/usr/local/bin/opam", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]

Или используйте wget

RUN ["wget", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...