devellopah
@devellopah

Почему не загружается архив с вордпрессом?

Пытаюсь написать болванку на докер для вордпресс. Знаю, что есть официальный образ wordpress, но там проблемы с правами. Более того, если хочется поднять существующий проект на докер, то готовый образ вряд ли поможет. Готовый образ, насколько я понял, только для проекта с нуля подходит.
В-общем, в app.dockerfile я вроде бы загружаю архив с вордпресс файлами и распаковываю папку в /var/www/html
RUN curl -o wordpress.tar.gz -SL https://wordpress.org/latest.tar.gz \
    && tar -xzf wordpress.tar.gz -C /var/www/html \
    && rm wordpress.tar.gz

В docker-compose я привязываю /var/www/html к /public
./public:/var/www/html:delegated
То есть я ожидаю увидеть папку с вордпресс файлами в /public/wordpress
Однако после билда папка /public остаётся пустой, как будто архив с файлами не загружается.
Смотрел контейнер app(docker-compose exec app bash), там пусто, хотя я указал распаковку туда (см. выше)
&& tar -xzf wordpress.tar.gz -C /var/www/html \

Подскажите, пожалуйста, что я упускаю?
Ниже скрин выполнения шага загрузки вордпресс. Судя по скрину, архив загружается, но где тогда папка с файлами?
615eb76dca909377039299.png
p.s. Ссылка на репозиторий, если есть желание поднять проект.
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 1
karabanov
@karabanov Куратор тега Docker
Системный администратор
~$ mkdir ./public
~$ ls -1 ./public
~$

~$  cat docker-compose.yml 
version: "2.3"

services:
  wp_site:
    image: "wordpress:php8.0-fpm"
    container_name: "wordpress"
    volumes:
      - "./public:/var/www/html:delegated"

~$ docker-compose up -d

~$  ls -1 public/
index.php
license.txt
readme.html
...


Затруднений не возникло. Ты что-то делаешь не так...

UPD
А понятно, что не так.
Если ты заглянешь в /usr/local/bin/docker-entrypoint.sh то увидишь там в частности:
docker-entrypoint.sh
if [ ! -e index.php ] && [ ! -e wp-includes/version.php ]; then
		# if the directory exists and WordPress doesn't appear to be installed AND the permissions of it are root:root, let's chown it (likely a Docker-created directory)
		if [ "$uid" = '0' ] && [ "$(stat -c '%u:%g' .)" = '0:0' ]; then
			chown "$user:$group" .
		fi

		echo >&2 "WordPress not found in $PWD - copying now..."
		if [ -n "$(find -mindepth 1 -maxdepth 1 -not -name wp-content)" ]; then
			echo >&2 "WARNING: $PWD is not empty! (copying anyhow)"
		fi
		sourceTarArgs=(
			--create
			--file -
			--directory /usr/src/wordpress
			--owner "$user" --group "$group"
		)
		targetTarArgs=(
			--extract
			--file -
		)
		if [ "$uid" != '0' ]; then
			# avoid "tar: .: Cannot utime: Operation not permitted" and "tar: .: Cannot change mode to rwxr-xr-x: Operation not permitted"
			targetTarArgs+=( --no-overwrite-dir )
		fi
		# loop over "pluggable" content in the source, and if it already exists in the destination, skip it
		# https://github.com/docker-library/wordpress/issues/506 ("wp-content" persisted, "akismet" updated, WordPress container restarted/recreated, "akismet" downgraded)
		for contentPath in \
			/usr/src/wordpress/.htaccess \
			/usr/src/wordpress/wp-content/*/*/ \
		; do
			contentPath="${contentPath%/}"
			[ -e "$contentPath" ] || continue
			contentPath="${contentPath#/usr/src/wordpress/}" # "wp-content/plugins/akismet", etc.
			if [ -e "$PWD/$contentPath" ]; then
				echo >&2 "WARNING: '$PWD/$contentPath' exists! (not copying the WordPress version)"
				sourceTarArgs+=( --exclude "./$contentPath" )
			fi
		done
		tar "${sourceTarArgs[@]}" . | tar "${targetTarArgs[@]}"
		echo >&2 "Complete! WordPress has been successfully copied to $PWD"
	fi

Тебе надо сделать тоже самое. Либо воспользоваться /usr/local/bin/docker-entrypoint.sh из официального образа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы