Здание внутри контейнера 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 при сборке изображения).