Изменение файлов в работающем контейнере
На этом шаге мы научимся изменять файлы внутри работающего контейнера. Это может быть полезно для отладки, например, при изменении конфигурационных файлов или добавлении временных скриптов в уже запущенный контейнер.
Мы начнём с запуска простого контейнера на основе образа ubuntu
, который более функциональный, чем alpine
, и включает shell и стандартные утилиты.
docker run -d --name my-ubuntu ubuntu sleep 3600
Эта команда запускает контейнер Ubuntu в фоновом режиме (-d
) и поддерживает его работу в течение часа с помощью команды sleep 3600
. Мы назвали контейнер my-ubuntu
для удобства.
Теперь воспользуемся docker exec
, чтобы получить shell внутри работающего контейнера.
docker exec -it my-ubuntu /bin/bash
Теперь вы находитесь внутри bash-оболочки контейнера my-ubuntu
. Приглашение командной строки изменится, указывая на то, что вы внутри контейнера.
Внутри контейнера создадим новый файл в директории /tmp
.
echo "This is a test file." > /tmp/test_file.txt
Проверим, что файл был создан и содержит правильное содержимое.
cat /tmp/test_file.txt
Вы должны увидеть вывод This is a test file.
. Это подтверждает, что мы смогли создать и записать файл внутри работающего контейнера.
Чтобы выйти из оболочки контейнера, просто введите exit
.
exit
Теперь вы вернулись в терминал вашей LabEx VM.
Мы также можем копировать файлы в работающий контейнер и из него с помощью команды docker cp
. Создадим файл на нашей LabEx VM и скопируем его в контейнер.
Сначала создадим файл local_file.txt
в вашей директории ~/project
.
echo "This file is from the host." > ~/project/local_file.txt
Теперь скопируем этот файл в директорию /tmp
контейнера my-ubuntu
.
docker cp ~/project/local_file.txt my-ubuntu:/tmp/
Формат команды docker cp
: docker cp <исходный_путь> <имя_контейнера>:<целевой_путь>
или docker cp <имя_контейнера>:<исходный_путь> <целевой_путь>
.
Проверим, что файл был скопирован в контейнер. Вернёмся в оболочку контейнера.
docker exec -it my-ubuntu /bin/bash
Внутри контейнера проверим наличие local_file.txt
в /tmp
.
ls /tmp/
Вы должны увидеть local_file.txt
вместе с test_file.txt
.
Теперь посмотрим содержимое local_file.txt
внутри контейнера.
cat /tmp/local_file.txt
Вы должны увидеть вывод This file is from the host.
.
Снова выйдем из оболочки контейнера.
exit
Наконец, удалим контейнер.
docker stop my-ubuntu
docker rm my-ubuntu
Этот шаг продемонстрировал, как изменять файлы внутри работающего контейнера с помощью docker exec
для получения shell и стандартных Linux-команд, а также как копировать файлы между хостом и контейнером с помощью docker cp
.