Я хотел бы автоматически создать контейнер Docker, который отображает общедоступные файлы веб-сайта, созданного с помощью платформы Hugo.
Поэтому я добавил следующий Dockerfile
в корневой каталог сайта Hugo:
FROM klakegg/hugo:0.104.3-onbuild AS hugo
FROM nginx
COPY --from=hugo /target /usr/share/nginx/html
Идея этой многоэтапной сборки состоит в том, чтобы создавать файлы веб-сайта на лету и отображать результат с помощью контейнера nginx.
Когда я создаю контейнер локально на своем ПК с Ubuntu 20.04 Linux, а затем запускаю его, все работает, как и ожидалось, и веб-сайт доступен по адресу localhost:8080
:
docker build -t hugo-local .
docker run -d -p 8080:80 hugo-local
Если я создал контейнер с помощью Google Cloud Build, процесс сборки завершится успешно. Файлы также копируются в правильный каталог (/usr/share/nginx/html
).
steps:
# This step builds the container image.
- name: 'gcr.io/cloud-builders/docker'
id: Build
args:
- 'build'
- '-t'
- 'eu.gcr.io/gcp-project/hugo-cloud:$BUILD_ID'
- '.'
# This step pushes the image to Container Registry
# The PROJECT_ID and SHORT_SHA variables are automatically
# replaced by Cloud Build.
- name: 'gcr.io/cloud-builders/docker'
id: Push
args:
- 'push'
- 'eu.gcr.io/gcp-project/hugo-cloud'
Однако вместо отображения веб-сайта отображается стандартная страница приветствия nginx:
docker run -d -p 8080:80 hugo-cloud
Что я делаю неправильно? Есть идеи? Обратная связь высоко ценится.
Пробовал разные базовые образы, разные среды.
Я не могу воспроизвести вашу проблему.
Я использовал один из моих собственных сайтов Hugo:
git clone \
--recurse-submodules \
[email protected]:me/repo.git
Я могу запустить свой сайт:
hugo server -D
И:
podman run \
--interactive --tty --rm \
--volume=${PWD}:/src \
--publish=1313:1313 \
docker.io/klakegg/hugo:0.104.3 \
server -D
К вашему вопросу я добавил файлы Dockerfile
и cloudbuild.yaml
.
Dockerfile
:
FROM klakegg/hugo:0.104.3-onbuild AS hugo
FROM nginx
COPY --from=hugo /target /usr/share/nginx/html
И я построил и смог запустить сайт:
podman build \
--tag=snippets:$(git rev-parse HEAD) \
--file=./Dockerfile \
${PWD}
podman run \
--interactive --tty --rm \
snippets:$(git rev-parse HEAD)
cloudbuild.yaml
:
steps:
- name: gcr.io/cloud-builders/docker
id: build
args:
- build
- --tag=gcr.io/${PROJECT_ID}/hugo-cloud:${BUILD_ID}
- '.'
#- name: gcr.io/cloud-builders/docker
# id: push
# args:
# - push
# - gcr.io/${PROJECT_ID}/hugo-cloud:${BUILD_ID}
images:
- gcr.io/${PROJECT_ID}/hugo-cloud:${BUILD_ID}
Оба подхода к работе
push
(по-вашему)docker push
и способу Cloud Build по умолчанию для перечисленияimages
.
Построить это:
gcloud builds submit ${PWD} \
--config=cloudbuild.yaml \
--project=${PROJECT}
Получите самый последний идентификатор сборки как TAG
и запустите контейнер:
TAG=$(\
gcloud builds list \
--limit=1 \
--project=${PROJECT} \
--format = "value(id)")
podman run \
--interactive --tty --rm \
--publish=8080:80 \
gcr.io/${PROJECT}/hugo-cloud:${TAG}
Это тоже работает.