docker-container образы обновление - Копирование файлов с хоста в контейнер Docker




15 Answers

  1. Получить имя контейнера или короткий идентификатор контейнера:

    $ docker ps
    
  2. Получить полный идентификатор контейнера:

    $ docker inspect -f   '{{.Id}}'  SHORT_CONTAINER_ID-or-CONTAINER_NAME
    
  3. Копировать файл:

    $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
    

ПРИМЕР:

$ docker ps

CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES

d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare

$ docker inspect -f   '{{.Id}}' cranky_pare

или же

$ docker inspect -f   '{{.Id}}' d8e703d7e303

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt
образа файлы контейнера

Я пытаюсь создать решение для резервного копирования и восстановления для контейнеров Docker, с которыми мы работаем.

У меня есть базовое изображение Docker, которое я создал, ubuntu:base и не хочу, чтобы каждый раз его перестраивать с помощью файла Docker для добавления в него файлов.

Я хочу создать сценарий, который запускается с главной машины, и создает новый контейнер, используя образ ubuntu:base Docker, а затем копирует файлы в этот контейнер.

Как скопировать файлы с хоста в контейнер?




Следующий довольно уродливый способ сделать это, но он работает.

docker run -i ubuntu /bin/bash -c 'cat > file' < file



Решение приведено ниже,

Из оболочки Докера,

root@123abc:/root#  <-- get the container ID

От хоста

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

Файл должен быть скопирован непосредственно в место, где контейнер находится в файловой системе.




Очень просто

  1. Создайте новый файл докеров и используйте существующее изображение в качестве базы.

    FROM myName/myImage:latest
    
    ADD myFile.py bin/myFile.py
    
  2. Затем создайте контейнер:

    docker build .
    






Чтобы скопировать файлы / папки между контейнером и локальной файловой системой, введите команду:

docker cp {SOURCE_FILE} {DESTINATION_CONTAINER_ID}:/{DESTINATION_PATH}

Например,

docker cp /home/foo container-id:/home/dir

Чтобы получить идентификатор contianer, введите следующую команду:

docker ps

Вышеуказанный контент взят из docker.com .




В среде докеров все контейнеры находятся в каталоге:

/var/lib/docker/aufs/required-docker-id/

Чтобы скопировать исходный каталог / файл в любую часть контейнера, введите следующую команду:

sudo cp -r mydir/ /var/lib/docker/aufs/mnt/required-docker-id/mnt/




Вы можете просто проследить IP-адрес вашей локальной машины, используя

ifconfig

Затем просто войдите в контейнер Docker и введите

scp user_name@ip_address:/path_to_the_file destination

В любом случае, если у вас нет клиента SSH и сервера, просто установите его, используя:

sudo apt-get install openssh-server



Многие из тех, кто находит этот вопрос, могут фактически иметь проблему копирования файлов в изображение Docker во время его создания (я сделал).

В этом случае вы можете использовать команду COPY в Dockerfile , который используется для создания изображения.

См. Документацию .




Лучший способ скопировать файлы в найденный контейнер - это установить каталог на хосте, используя опцию -v команды docker run.




В случае, если кому-то вроде меня не ясно, что mycontainer в @ h3nrik, это на самом деле идентификатор контейнера. Чтобы скопировать файл WarpSquare.mp4 в /app/example_scenes/1440p60 из /app/example_scenes/1440p60 контейнера докера в текущую папку, я использовал это.

docker cp `docker ps -q -l`:/app/example_scenes/1440p60/WarpSquare.mp4 .

где docker ps -q -l вытаскивает идентификатор контейнера последнего завершенного экземпляра. В случае, если он не является выходным контейнером, вы можете получить его через docker container ls или docker ps




Если вы используете Windows в качестве хоста, вы можете использовать WinSCP для подключения к Docker и передачи файлов через графический интерфейс.

Если в Linux команда scp также будет работать через терминал.




Синтаксис контейнера:

 docker run -v /HOST/folder:/Container/floder 

В файле докеров

COPY hom* /myFolder/        # adds all files starting with "hom"
COPY hom?.txt /myFolder/    # ? is replaced with any single character, e.g., "home.txt"



Мой любимый метод:

КОНТЕЙНЕРЫ:

CONTAINER_ID=$(docker ps | grep <string> | awk '{ print $1 }' | xargs docker inspect -f '{{.Id}}')

file.txt

mv -f file.txt /var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/root/file.txt

или же

mv -f file.txt /var/lib/docker/aufs/mnt/$CONTAINER_ID/rootfs/root/file.txt



Еще один способ - использовать старый добрый scp . Это полезно в случае, если вам нужно скопировать каталог.

С вашего хоста:

scp FILE_PATH_ON_YOUR_HOST IP_CONTAINER:DESTINATION_PATH
scp foo.txt 172.17.0.2:foo.txt

В случае необходимости скопировать каталог:

scp -r DIR_PATH_ON_YOUR_HOST IP_CONTAINER:DESTINATION_PATH
scp -r directory 172.17.0.2:directory

обязательно установите ssh в свой контейнер.

apt-get install openssh-server





Related