Здание внутри контейнера Docker

В простом случае запуска Gitea из контейнера Docker текущий Dockerfile предполагает, что вы уже скомпилировали Gitea и имеете его для создания образа.

В моем случае на моем компьютере не установлена ​​Gitea. Я нахожусь на Mac OSX, и я думал, что если я собираюсь на этой машине, но Gitea Dockerfile использует Alpine Linux в качестве базового образа, будет ли какой-то конфликт в этом случае? Может кто-нибудь уточнить, будет ли это проблемой?

Обходной путь, о котором я думал, состоял в том, чтобы собрать Gitea непосредственно внутри контейнера с Alpine Linux. Другой возможностью было бы для меня скомпилировать на Mac OSX и затем изменить базовый образ, я полагаю.

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

Редактировать: я пытался скомпилировать внутри контейнера, но столкнулся с проблемой. Из DockerHub доступен Dockerfile ниже:

FROM alpine:3.7
LABEL maintainer="The Gitea Authors"

EXPOSE 22 3000

RUN apk --no-cache add \
    su-exec \
    ca-certificates \
    sqlite \
    bash \
    git \
    linux-pam \
    s6 \
    curl \
    openssh \
    gettext \
    tzdata \
    make 
RUN addgroup \
    -S -g 1000 \
    git && \
  adduser \
    -S -H -D \
    -h /data/git \
    -s /bin/bash \
    -u 1000 \
    -G git \
    git && \
  echo "git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" | 
chpasswd

# Dockerfile assumes Gitea is already up and running
# In this case, copy the source to container and Compile Gitea in Alpine 
Environment
COPY gitea-master.zip /
RUN unzip gitea-master.zip
RUN    cd gitea-master
RUN    make generate all

Вы можете видеть, что я добавил инструкции для копирования gitea в контейнер, распаковки, cd в каталог и сборку, но я получаю следующий вывод:

Step 1/17 : FROM alpine:3.7
 ---> 3fd9065eaf02
Step 2/17 : LABEL maintainer="The Gitea Authors"
 ---> Using cache
 ---> b6bb053b3e89
Step 3/17 : EXPOSE 22 3000
 ---> Using cache
 ---> ade88a29df64
Step 4/17 : RUN apk --no-cache add     su-exec     ca-certificates     
sqlite     bash     git     linux-pam     s6     curl     openssh     
gettext     tzdata     make
 ---> Using cache
 ---> 460a5562c60f
Step 5/17 : RUN addgroup     -S -g 1000     git &&   adduser     -S -H -D     
-h /data/git     -s /bin/bash     -u 1000     -G git     git &&   echo 
"git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" | chpasswd
 ---> Using cache
 ---> 07ff1f0b2d3e
Step 6/17 : COPY gitea-master.zip /
 ---> Using cache
 ---> 3ad1e3177659
Step 7/17 : RUN unzip gitea-master.zip
 ---> Using cache
 ---> 61a2beb19e1e
Step 8/17 : RUN    cd gitea-master
 ---> Using cache
 ---> 6985914927b9
Step 9/17 : RUN    make generate all
 ---> Running in 3e603f88c302
make: *** No rule to make target 'generate'.  Stop.
The command '/bin/sh -c make generate all' returned a non-zero code: 2

Makefile ясно показывает, что эти цели доступны, но это немного озадачило меня. Какие-либо предложения?

1 ответ

Решение

Для сборки бинарных файлов Go (я проверил gitea и, похоже, он собран с Go) для Linux на OSX, вы должны предоставить переменную env GOOS установлен в linux, Вы можете попробовать добавить GOOS=linux перед этой строкой в ​​make-файле gitea: https://github.com/go-gitea/gitea/blob/master/Makefile или просто запустите GOOS=linux make generate build, Это должно создать двоичный файл go, который вы можете использовать в образе Docker.

Отредактируйте в ответ на редактирование: возможно, вы разархивировали gitea-master в более глубокий каталог, проверьте вывод ls при создании образа, чтобы увидеть, доступен ли вам Makefile (кажется, что в вашем pwd нет Makefile при сборке изображения).

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