Dockerfile: добавление и удаление файлов во время сборки: проблема с ЗАПУСКОМ rm -r

#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 с очищенными данными контейнеров db

3. В папке themes в пакете есть каталоги 2017, 2019 и 2020 годов. Я хочу удалить некоторые из них во время создания. После запуска контейнера я могу удалить его с помощью командной строки, чтобы я видел, что они есть. Но я не могу запустить rm в Dockerfile.

4. похоже, в вашей базе данных хранятся темы WordPress, попробуйте запустить WP container с пустой базой данных

5. Это не связано с базой данных. Я пытаюсь удалить файлы в файловой системе /var/www/html/. Я вижу там файлы. Я могу rm их с помощью CLI. Я хочу иметь возможность rm их с помощью команды RUN в Dockerfile.