#dockerfile
#dockerfile
Вопрос:
В моем Dockerfile я хочу добавить каталог и удалить некоторые существующие каталоги. Добавление работает, а удаление — нет.
Мой Dockerfile:
FROM wordpress:5.5.1-php7.4-apache
COPY themes/twentyseventeen-b /var/www/html/wp-content/themes/twentyseventeen-b
COPY images/header.jpg /var/www/html/wp-content/uploads/2020/01/a.jpg
#This is line that causes an error:
RUN rm -r /var/www/html/wp-content/themes/twentytwenty
-КОПИРОВАНИЕ работает, и мои каталоги создаются, а файлы загружаются
-ЗАПУСК rm -r /var/www / html /wp-content/themes/twentytwenty не работает:
rm: cannot remove '/var/www/html/wp-content/themes/twentytwenty': No such file or directory
Но я знаю, что каталог существует (если я закомментирую строку RUN rm …. и завершу сборку, я могу перейти к контейнеру и увидеть, что каталог там).
Я пытался использовать одинарные кавычки вокруг имени каталога, но существует та же проблема.
Я также попытался удалить каталог twentyseventeen-b сразу после создания. Это не выдает ошибку сборки, но также не удаляет каталог (я все еще вижу каталог в CLI):
FROM wordpress:5.5.1-php7.4-apache
COPY themes/twentyseventeen-b /var/www/html/wp-content/themes/twentyseventeen-b
RUN rm -r /var/www/html/wp-content/themes/twentyseventeen-b
Если я использую CLI, я могу удалить любые каталоги в /var/www/html.
Docker-compose.yml, который запускает этот Dokerfile:
version: '3.3'
services:
db:
build: ./mariadb
volumes:
- db_data:/var/lib/mysql
restart: always
wordpress:
depends_on:
- db
build: ./wordpress
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Ответ №1:
вам нужно добавить -f
аргумент в rm
команду, что означает: «игнорировать несуществующие файлы и аргументы, никогда не запрашивать»
например:
RUN rm -rf /var/www/html/wp-content/themes/twentytwenty
Комментарии:
1. Флаг -f не позволит отобразить ошибку, но проблема все еще остается… Я не могу удалить каталоги, которые мне нужны, в процессе создания контейнера.
2. по умолчанию в in
wordpress:5.5.1-php7.4-apache
нет предустановленных тем. Попробуйте запустить контейнер wordpress с очищенными данными контейнеров db3. В папке themes в пакете есть каталоги 2017, 2019 и 2020 годов. Я хочу удалить некоторые из них во время создания. После запуска контейнера я могу удалить его с помощью командной строки, чтобы я видел, что они есть. Но я не могу запустить rm в Dockerfile.
4. похоже, в вашей базе данных хранятся темы WordPress, попробуйте запустить WP container с пустой базой данных
5. Это не связано с базой данных. Я пытаюсь удалить файлы в файловой системе /var/www/html/. Я вижу там файлы. Я могу rm их с помощью CLI. Я хочу иметь возможность rm их с помощью команды RUN в Dockerfile.