TL; DR
В чем разница между / home и / root
/ home имеет том, связанный с ним
как обойти проблему
создать файл в точке входа (после построения контейнера), ИЛИ создать файл внутри тома (я использую первый вариант в моем длинном ответе)
Длинный ответ:
Выполнение docker inspect containerId
после построения образа и контейнера показывает их тома, связанные с домашним каталогом:
"Source": "/var/lib/docker/volumes/1447dbc568742221a757a650427f38fb485e42fc7c6e959f33966922fe862d13/_data",
"Destination": "/home",
Том RW (прочитаноwrite), так что вы можете записать в файл один раз внутри контейнера. (Я тестировал, используя docker exec -it containerId /bin/sh
, затем touch /home/TEST_2/new_file.txt
)
Попробуйте использовать скрипт Entrypoint для создания папок / файлов.
Редактировать:
Я хотел увидеть сам, но столкнулся с парой препятствий. В родительском контейнере (gcr.io/deeplearning-platform-release/pytorch-cpu:m27) уже есть файл entrypoint.sh
.
Кроме того, добавление команды CMD
или ENTRYPOINT
переопределит родителейконтейнер точки входа (который вам, вероятно, нужен).
рабочий раствор :
С хоста скопируйте файл entrypoint.sh (при условии, что вы хотите изменить его на своем хосте)). docker cp containerId:/entrypoint.sh .
Измените точку входа, добавив команды TOUCH:
#!/bin/bash
touch /home/TEST_2/new_file.txt # <-- I added this
. /env.sh
. /root/miniconda3/etc/profile.d/conda.sh
conda activate base
exec "$@"
Измените ваш файл Docker, чтобы скопировать новый entrypoint.sh
, который заменит существующий:
COPY entrypoint.sh /entrypoint.sh
Ваши команды листинга при запуске будут такими же, но если вы войдете в контейнер, вы увидите ваш файл:
# ls home/TEST_2
new_file.txt
#