ධාරකයේ සිට ඩෝකර් බහාලුමට ගොනු පිටපත් කිරීම


1615

මම උත්සාහ කරන්නේ අප සමඟ වැඩ කරන ඩෝකර් බහාලුම් සඳහා උපස්ථයක් ගොඩනඟා විසඳුමක් ලබා දීමටයි.

මා විසින් නිර්මාණය කරන ලද ඩෝකර් පාදක රූපය මා සතුව ඇති අතර, ubuntu:baseසෑම විටම ඩොකර් ගොනුවක් සමඟ එය නැවත ගොඩනඟා ගැනීමට අවශ්‍ය නැත.

මට අවශ්‍ය වන්නේ ධාරක යන්ත්‍රයෙන් ධාවනය වන ubuntu:baseඩොකර් රූපය භාවිතා කර නව බහාලුමක් නිර්මාණය කර එම බහාලුමට ලිපිගොනු පිටපත් කිරීමයි.

ධාරකයේ සිට බහාලුමට ලිපිගොනු පිටපත් කරන්නේ කෙසේද?


12
ඔබට නැවත ගොඩනැඟීමට අවශ්‍ය නැතිනම්, " ඩොකර් කැපවීම " නොකරන්නේ ඇයි ? එය ඔබගේ ප්‍රතිරූපය සුරකිනු ඇත.
බෙරෙන්ඩ් ඩි බෝයර්

28
කිසිවෙකු ආමන්ත්‍රණය නොකළ අදහසක් පිළිබඳ ප්‍රකාශයක්: පොදුවේ ගත් කල, බහාලුම් “ආධ්‍යාත්මික” ලෙස සලකන්න. ධාවනය වන භාජනයකට / සිට ගොනු පිටපත් කිරීම සඳහා නඩු භාවිතා කරයි (පරීක්ෂා කිරීම, මූලාකෘතිකරණය). නමුත් ඔබට ඩොකර් ෆයිල්ස් සහ / හෝ රචනා භාවිතා කර අවශ්‍ය දේ නැවත ගොඩනඟා ගත නොහැකි තැනක ඔබ සිටින්නේ නම්, ඔබ නරක තැනක සිටිය හැකිය. ඔබට සාමාන්‍යයෙන් බහාලුම් මෙහෙයුම් පද්ධතිය හෝ වීඑම් වස්තූන් මෙන් උපස්ථ කිරීමට අවශ්‍ය නැත. පොදුවේ ගත් කල :-)
ස්කොට් ප්‍රයිව්

Answers:


2757

මෙම cpවිධානය ගොනු පිටපත් කිරීමට භාවිතා කළ හැක.

එක් විශේෂිත ගොනුවක් කන්ටේනරයට පිටපත් කළ හැකිය:

docker cp foo.txt mycontainer:/foo.txt

එක් විශේෂිත ගොනුවක් කන්ටේනරයෙන් පිටපත් කළ හැකිය:

docker cp mycontainer:/foo.txt foo.txt

අවධාරණය සඳහා, mycontainerයනු රුවනයකි ID, නෑ යනු රූපය හැඳුනුම්පත.

ෆෝල්ඩරයේ අඩංගු ගොනු කිහිපයක් ෆෝල්ඩරයට srcපිටපත් කළ හැකිය target:

docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target

යොමුව: සඳහා ඩෝකර් සීඑල්අයි ලියකියවිලිcp

1.8 ට පෙර ඩෝකර් අනුවාද වලදී කළ හැකි වූයේ බහාලුමක සිට ධාරකයට ගොනු පිටපත් කිරීම පමණි. ධාරකයේ සිට බහාලුමක් දක්වා නොවේ.


2
මෙය සත්කාරක vm හෝ ප්‍රධාන මෙහෙයුම් පද්ධතියේ විය හැකි අතර ධාරක සිට බහාලුම් දක්වා හෝ ධාරකයට vm ක්‍රියා කරයි (හෝ ප්‍රධාන OS)
ඇඩම් ටියුලිපර් - MSFT

8
ඩොකර් ෆයිල් එකක ඔබට ගොඩනංවන කාලය තුළ ගොනු එක් කිරීමට ADD යතුරු පදය භාවිතා කළ හැකිය.
0x7d7b


11
docker cpබහාලුම් සිට ධාරකයට පිටපත් කිරීමට භාවිතා කිරීම හොඳින් ක්‍රියා කරයි, නමුත් ධාරක සිට බහාලුම් දක්වා ගොනු පිටපත් කිරීමට එය භාවිතා කරන විට කිසිදු බලපෑමක් නැත ... කිසිවෙකු දන්නේ ඇයි? docker version: ඩෝකර් අනුවාදය 1.10.3, cb079f6- සහය
නොදක්වන්න

4
ඩොකර් සීපී භාවිතා කර ධාරකයේ සිට බහාලුම් දක්වා ගොනු කිහිපයක් පිටපත් කළ හැකිද?
යෝගී

183
  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

13
මට නම් ධාරකයේ සවි කිරීමේ මාවතේ අඩංගු aufsනොවූ නමුත් a devicemapper. බහාලුම් සවිකිරීමේ මාර්ගය පරීක්ෂා කිරීමට පහසුම ක්‍රමය (එය ක්‍රියාත්මක වන අතරතුර) විධානය ක්‍රියාත්මක කිරීමයි mount.
ඩෙරෙනියෝ

3
මම ඉහත විසඳුම උත්සාහ කළා. එය ලිපිගොනු විශේෂිත නාමාවලියට පිටපත් කළේය. කෙසේ වෙතත්, මම ඩොකර් බහාලුම් සඳහා bash භාවිතා කරන විට, ලිපිගොනු එහි නොපෙන්වයි. මට නැතිවූ දෙයක් තිබේද?
ඇපල්බඩ්

2
නව මාර්ගය වන්නේ / var / lib / docker / devicemapper / mnt / <<id> / rootfs /
mcuadros

4
මට නම්, ඩොකර් 1.4.1 හි (වර්තමාන නවතම), එය/var/lib/docker/aufs/diff/<id>/
user193130

3
දුප්පත් මැකෝස් පරිශීලකයින් ගැන කුමක් කිව හැකිද? සවිකරන නාමාවලිය /var/libමා සඳහා ඇත. find / -name dockerප්‍රයෝජනවත් නොවීය.
praagupd

144

පිරිසිදුම ක්‍රමය නම් බහාලුම ආරම්භ කිරීමේදී ධාරක නාමාවලිය බහාලුම මත සවි කිරීමයි:

{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile

3
ඔබට කන්ටේනරය ධාවනය කරන්නේ කෙසේද? මම හිතුවේ ඔබට එය කළ හැක්කේ රූපයකින් පමණක් බවයි.
පවෙල් සයිට්සෙව්

බහාලුම් පවතින විට මට එය ක්‍රියාත්මක කළ නොහැක. පහත තාර හොඳයි.
Eino Mäkitalo

1
මෙය මට වැඩ කළ හැකි එකම ක්‍රමය නම් රූපය ධාවනය කිරීමත් සමඟම ශබ්දය ඇමිණීමයි (කන්ටේනරය සවි කිරීම). අවසන් වූයේ:docker run -d -p -v /host/path:/mnt --name container_name image_name
පීටර් එන්

2
මෙය මට වැඩ කරන්නේ නැත. අවම වශයෙන් කන්ටේනරයක් ධාවනය කළ නොහැක. රූපය පමණක් ධාවනය කළ හැකිය
ශෂාන්ක් හෙග්ඩේ

2
මම පුදුමයට පත් වෙමි, docker cpඑය එක්-මාර්ග මෙහෙයුමක්!
ThorSummoner

115

පහත දැක්වෙන්නේ එය සිදු කිරීම තරමක් කැත ක්‍රමයකි නමුත් එය ක්‍රියාත්මක වේ.

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

7
මෙය විශිෂ්ටයි! නමුත් වෙනස කිරීමට අමතක නොකරන්න : docker commit `docker ps -l -q` ubuntu-with-file. නැතිනම් වෙනස නැති වී යනු ඇත (ඒ වෙනුවට ඔබට අවශ්‍ය ඕනෑම නමක් භාවිතා කරන්න ubuntu-with-file)
Michael_Scharf

Ri එරික්: කන්ටේනරය ක්‍රියාත්මක වන විට ගොනුව පිහිටා ඇත්තේ කොහේද?
coanor

49
සංස්කරණයේදී, docker execධාවනය වන බහාලුම් සමඟ වැඩ කිරීම සඳහා අපට නව අංගයක් භාවිතා කළ හැකිය :docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
මික්ල්

17
IkMikl මම හිතන්නේ එය docker exec -i ...වෙනුවට විය යුතුයි -it, මන්ද ගොනුවකින් නල මාර්ගයේ TTY නොමැති නිසා.
z0r

4
ඔබ තවමත් ඩෝකර් හි පැරණි අනුවාදයක සිරවී සිටී නම් (මා මෙන්) සහ සම්පූර්ණ නාමාවලියක් පිටපත් කිරීමට ඔබට අවශ්‍ය නම්, ඔබට මෙය කළ හැකිය: tar -c -v -f - /path/to/host/directory | docker exec -i <container-name> bash -c 'tar -x -v --strip-components 1 -f - -C /path/to/container/directory'
eahanson

43

ඔබට මෙය ක්‍රියාත්මක වන භාජනයක කිරීමට අවශ්‍ය නම් ඔබට ඩෝකර් ක්‍රියාත්මක කළ හැකිය (1.3 හි එකතු කර ඇත).

පළමුව, කන්ටේනරයේ නම හෝ හැඳුනුම්පත සොයා ගන්න:

$ docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                   NAMES
b9b7400ddd8f        ubuntu:latest                "/bin/bash"         2 seconds ago       Up 2 seconds                                elated_hodgkin

ඉහත උදාහරණයේ අපි එක්කෝ භාවිතා කළ හැකි b9b7400ddd8fහෝ elated_hodgkin.

ඔබට /tmp/somefilesධාරකයේ /var/wwwඇති සියල්ල කන්ටේනරයට පිටපත් කිරීමට අවශ්‍ය නම් :

$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www

අපට පසුව /bin/bashකන්ටේනරය තුළ ක්‍රියාත්මක කර එය ක්‍රියාත්මක වූ බව තහවුරු කර ගත හැකිය:

$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1  file2

සෙන්ටෝස් 7.4 හි ඩොකර් 1.16 හි විශිෂ්ට ලෙස ක්‍රියා කරයි.
ඩූඩි බෝයි

41
  1. නව ඩොකර් ෆයිල් එකක් සාදා දැනට පවතින රූපය ඔබේ පදනම ලෙස භාවිතා කරන්න.

    FROM myName/myImage:latest
    
    ADD myFile.py bin/myFile.py
    
  2. ඉන්පසු කන්ටේනරය සාදන්න:

    docker build .
    

2
මට වැඩ කළේ මෙයයි. වෙන කිසිවක් නැත. ඔබට ස්තුතියි!
ඕවන්

එය සෘජුවම නව බහාලුමක් නොව නව රූපයක් නිර්මාණය කරනු ඇත. MyFile.py වෙනස් කර ඇති අතරතුර ඔබ මෙම රූපය නැවත භාවිතා කරන්නේ නම්, ඔබ රූපය නැවත ගොඩනඟන්නේ නැත්නම් එය ගොනුවේ පැරණි අනුවාදය භාවිතා කරයි.
ගුයිලූම් ලෙබ්‍රෙටන්

මම මෙය වේගවත්ම ක්‍රමය සොයා ගන්නේ ඔබ දුරස්ථ සේවාදායකයක පරීක්ෂා කරන්නේ නම් පමණි.
ඩොමිනික් කෘලක්

අනුව මෙම බොහෝ මිනිසුන් ඒ වෙනුවට එක් කරන්න වඩා COPY භාවිතා කළ යුතු වේ. නමුත් දේශීය ලිපිගොනු සඳහා (මෙම උදාහරණයේ දී මෙන්) ඒවා සමාන වේ.
hoosierEE

40

විසඳුම පහත දැක්වේ,

ඩෝකර් කවචයෙන්,

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

ධාරකයෙන්

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

ගොනුව ගොනු පද්ධතියේ කන්ටේනරය වාඩි වී සිටින ස්ථානයට කෙලින්ම පිටපත් කළ යුතුය.


10
නියම පිළිතුර. නව ඩොකර් නිකුතු වලදී මාර්ගය / var / lib / docker / aufs / mnt /
ඇලෙක්ස් වොල්කොව්

ඩෙවිස්මැපර් මාර්ගය ඩොකර් 1.6 සමඟ ෆෙඩෝරා මත වැඩ කරන බවක් නොපෙනේ. එය වෙනම Q, stackoverflow.com/questions/29939419/… ලෙස දක්වා තිබේ නම් , ඕනෑම අදහස් දැක්වීමක් අගය කරනු ඇත.
යෝගී_ඩී

33

සාමාන්යයෙන් වර්ග තුනක් ඇත:

  1. කන්ටේනරයක සිට ධාරකයට

    docker cp container_id:./bar/foo.txt .
    

dev1

  1. ධාරකයේ සිට බහාලුමක් දක්වා

    docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt
    

dev2

  1. කන්ටේනරයක සිට බහාලුමක් දක්වා 1 සහ 2 මිශ්‍ර වේ

    docker cp container_id1:./bar/foo.txt .
    
    docker exec -i container_id2 sh -c 'cat > ./bar/foo.txt' < ./foo.txt
    

dev3


6
docker cp දෙයාකාරයෙන්ම ක්‍රියා කරයි. ක්‍රියාත්මක කිරීම, බළලා සහ නැවත හරවා යැවීම අවශ්‍ය නොවේ. docker cp host_file.txt බහාලුම: / path /
tbm

32

ධාවනය වන භාජනයකට ගොනු පිටපත් කිරීම සඳහා තවත් විසඳුමක් වන්නේ තාර භාවිතා කිරීමයි:

tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x

ගොනුව පිටපත් foo.shබවට /tmpඑම කන්ටේනර්.

සංස්කරණය කරන්න: ඉවත් කරන්න reduntant -f, ස්තුති මාර්ටන් ගේ අදහස්.


ඔබට සම්පූර්ණ නාමාවලියක් යැවීමට අවශ්‍ය නම් මෙය හොඳයි. තනි ගොනුවක් සඳහා, එරික්ගේ පිළිතුර සරල ය.
කෙල්වින්

1
El කෙල්වින්: නමුත් තාර ද ගොනු ගුණාංග සහ නම ආරක්ෂා කරයි. අනෙක් ඒවායින් අදහස් වන්නේ ඔබ නම එක් වරක් පමණක් ටයිප් කළ යුතු බවයි (එවිට ඔබේ කවචයෙන් ටැබ් සම්පුර්ණ වේ). ඉතින් මම කියන්නේ තාර ඇත්තෙන්ම බහාලුම්වල ස්ථාපනය කර ඇති තාක් කල් එය සරලයි.
මාර්ටන්

1
මෙම -f -සැකසුම් හැසිරීම කෙසේ හෝ stdout වෙත ලිවීමට වන අතර, නමුත් ටිකක් අතිරික්ත වේ.
මාර්ටන්

මෙයින් අදහස් කරන්නේ තාර
සෙලිජ්

ඔබ හරි - ධාරකයේ සහ කන්ටේනරය තුළ තාර සවි කිරීමට ඔබට අවශ්‍යයි. වර්තමානයේ ඩොකර් සීපී භාවිතා කිරීම වඩා හොඳ විසඳුමයි.
joemat

24

ගොනුවක් ධාරකයේ සිට ධාවනය වන බහාලුමට පිටපත් කිරීමට

docker exec -i $CONTAINER /bin/bash -c "cat > $CONTAINER_PATH" < $HOST_PATH

එරික්ගේ පිළිතුර සහ මික්ල්ගේ සහ z0r ගේ අදහස් මත පදනම්ව .


පිළිගත් විසඳුම් සමහර විට ධාවන බහාලුම් වෙත මාරු කිරීමේදී ලිපිගොනු ඇතුල් කිරීමට බාධා කරයි. එවැනි අවස්ථාවන් සඳහා මෙය පරිපූර්ණව ක්‍රියා කරයි
සිහින

16

මාතෘකාව තුළ මෙම ප්‍රශ්නයේදී මතු කර ඇති 'ධාරකයේ සිට ඩෝකර් බහාලුමට ලිපිගොනු පිටපත් කිරීම' යන ප්‍රශ්නයට මෙය සෘජු පිළිතුරකි.

උත්සාහ කරන්න docker cp. එය කිරීමට පහසුම ක්‍රමය වන අතර මගේ මැක්හි පවා ක්‍රියා කරයි. භාවිතය:

docker cp /root/some-file.txt some-docker-container:/root

මෙය ඔබගේ ධාරක යන්ත්‍රයේ some-file.txtඇති නාමාවලියෙහි ඇති ගොනුව /rootඩෝකර් බහාලුමට some-docker-containerනාමාවලියට ඇතුළත් කරනු ඇත /root. එය ආරක්ෂිත පිටපත් සින්ටැක්ස් වලට ඉතා ආසන්නය. පෙර ලිපියේ පෙන්වා ඇති පරිදි, ඔබට එය අනෙක් අතට භාවිතා කළ හැකිය. එනම්, ඔබ ද කන්ටේනරයේ සිට ධාරකයට ගොනු පිටපත් කරයි.

ඔබ මෙම ලිපිය පහත් කොට දැක්වීමට පෙර කරුණාකර ඇතුලත් කරන්න docker cp --help . ප්‍රලේඛනය කියවීම ඉතා ප්‍රයෝජනවත් වේ, සමහර විට ...

ඔබ ඒ ආකාරයට අකමැති නම් සහ ඔබ දැනටමත් නිර්මාණය කර ඇති සහ ධාවනය වන බහාලුම්වල දත්ත පරිමාවක් අවශ්‍ය නම්, විනෝදාස්වාදය අද ඔබට ඇති එකම විකල්පයයි. මෙයද බලන්න දැනට පවතින ඩොකර් බහාලුමකට පරිමාවක් එකතු කරන්නේ කෙසේද? .


15

ඩෝකර් 1.8 සමඟ, docker cpධාරකයේ සිට බහාලුම් දක්වා ගොනු පිටපත් කිරීමට හැකියාව ඇත. ඩොකර් බ්ලොග් සටහන බලන්න ඩොකර් 1.8 නිවේදනය කිරීම: අන්තර්ගත භාරය, මෙවලම් පෙට්ටිය සහ රෙජිස්ට්‍රි සහ වාද්‍ය වෘන්දයට යාවත්කාලීන කිරීම් .


මෙන්න උදාහරණයක්docker cp foo.txt mycontainer:/foo.txt
lockwobr

15

මම මෙහි (ඉහළට) විසඳුම් බොහොමයක් උත්සාහ කළ නමුත් ඩොකර් 17.09 (2018 දී) හි තවදුරටත් / var / lib / docker / aufs ෆෝල්ඩරය නොමැත.

මෙම සරල docker cpමෙම කාර්යය විසඳීය.

docker cp c:\path\to\local\file container_name:/path/to/target/dir/

බහාලුම් නාමය ලබා ගන්නේ කෙසේද?

 docker ps 

ඒ නිසා එය NAMESකොටස. භාවිතා නොකරන්න IMAGE.


12

බහාලුමක් සහ දේශීය ගොනු පද්ධතිය අතර ගොනු / ෆෝල්ඩර පිටපත් කිරීමට, විධානය ටයිප් කරන්න:

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

උදාහරණයක් වශයෙන්,

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

Contianer id ලබා ගැනීම සඳහා, දී ඇති විධානය ටයිප් කරන්න:

docker ps

ඉහත අන්තර්ගතය docker.com වෙතින් ලබාගෙන ඇත.


8

කන්ටේනරය දැනටමත් ක්‍රියාත්මක යැයි උපකල්පනය කර, දී ඇති විධානය ටයිප් කරන්න:

# cat /path/to/host/file/ | docker exec -i -t <container_id> bash -c "/bin/cat > /path/to/container/file"

හවුල් නාමාවලිය භාවිතා කර ගොනු බෙදා ගැනීමට, දී ඇති විධානය ටයිප් කිරීමෙන් කන්ටේනරය ධාවනය කරන්න:

# docker run -v /path/to/host/dir:/path/to/container/dir ...

සටහන: බහාලුම් භාවිතා කරන්නන් ධාරකයේ පරිශීලකයින්ට සමාන නොවන බැවින් අවසරයන් සමඟ ගැටළු ඇතිවිය හැකිය.


1
ඊට අමතරව:docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
මික්ල්

2
catඑය පිට වූ පසු එය අවසන් නොවන බව සලකන්න . එය ඔබට වැදගත් නම් (ඔබ බාෂ් ස්ක්‍රිප්ට් පිටපත් කරන්නේ නම්, බාෂ් ඒවා ක්‍රියාත්මක කිරීම ප්‍රතික්ෂේප කරනු ඇත), ඔබ එම ගොනුව lsof | grep yourfilenameරඳවාගෙන සිටින catක්‍රියාවලිය ධාවනය කර මරා දැමිය යුතුය .
ජොන්ඩෝඩෝ

ස්තූතියි! නියම ඉඟිය. එක් විධානයකින් මෙම ක්‍රියාවලිය kill ාතනය කරන්නේ කෙසේදැයි ඔබට මට පැවසිය හැකිද? වගේ දෙයක් kill $(lsof | grep /path/to/file | sed ...). ඔබගේ උදව්වට මම
කෘත ful

kill $(docker top CONTAINERNAME | sed -n '/cat$/p' | sed 's/^root[^0-9]\+\([0-9]\+\).*$/\1/')
මික්ල්

8

ඩෝකර් සිට ධාරකයට දත්ත පිටපත් කිරීමේ විධානය මෙයයි:

docker cp container_id:file path/filename /hostpath

docker cp a13fb9c9e674:/tmp/dgController.log /tmp/

සත්කාරකයේ සිට ඩොකර් වෙත දත්ත පිටපත් කිරීමේ විධානය පහත දැක්වේ:

docker cp a.txt ccfbeb35116b:/home/

7

ඩොකර් පරිසරයක, සියලුම බහාලුම් නාමාවලියෙහි දක්නට ලැබේ:

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

ප්‍රභව බහලුම / ගොනුව කන්ටේනරයේ ඕනෑම කොටසකට පිටපත් කිරීමට, දී ඇති විධානය ටයිප් කරන්න:

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


5

tarසහ docker cpනාමාවලියක ඇති සියල්ල පිටපත් කිරීම සඳහා හොඳ සංයෝජනයක් වේ.

දත්ත පරිමාව සහිත බහාලුමක් සාදන්න

docker create --name dvc --volume /path/on/container cirros

නාමාවලි ධූරාවලිය ආරක්ෂා කිරීම සඳහා

tar -c -C /path/on/local/machine . | docker cp - dvc:/path/on/container

ඔබේ වැඩ පරීක්ෂා කරන්න

docker run --rm --volumes-from dvc cirros ls -al /path/on/container

5

ධාරකය CentOS හෝ Fedora නම්, එහි ප්‍රොක්සියක් නොමැත /var/lib/docker/aufs, නමුත් එය යටතේ /proc:

cp -r /home/user/mydata/* /proc/$(docker inspect --format "{{.State.Pid}}" <containerid>)/root

මෙම cmd මඟින් dataඩිරෙක්ටරියේ සියලුම අන්තර්ගතයන් /"බහාලුම්" හැඳුනුම්පත සමඟ බහාලුම් වෙත පිටපත් කරනු ඇත .


මෙය රෙඩ්හැට් වලට පමණක් ආවේණික නොවේ: එය ඩෙබියන් මත ද ක්‍රියා කරයි. (සමහර විට සියලුම Gnu / Linux සමඟ /proc). Root පමණක් නොව වෙනත් තැනක ගොනුවක් තැබීමට මාර්ගය දිගු කරන්න.
ctrl-alt-delor

5

mycontainerLike h3nrik පිළිතුරෙහි තේරුම මා වැනි කෙනෙකුට පැහැදිලි නැතිනම්, එය ඇත්ත වශයෙන්ම බහාලුම් හැඳුනුම්පතයි. ගොනුව පිටපත් කිරීමට WarpSquare.mp4දී /app/example_scenes/1440p60මම මේ භාවිතා වත්මන් ෆෝල්ඩරය වෙත පිටවිය docker බහාලුම්.

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

එහිදී docker ps -q -lපසුගිය පිටවිය අවස්ථා රුවනයකි id දක්වා පත්වෙලා. නඩුවේ එය ඔබ විසින් එය ලබා ගත හැක සඳහා පිටවිය රුවනයකි නොවේ docker container lsහෝdocker ps


1
පිටවන බහාලුම්වල අයිඩී docker ps -aහෝ සමඟ ඔබට ලැයිස්තු ගත කළ හැකිය docker container ls -a.
0x7d7b

4

මෙම ප්රශ්නය ඇත්තටම Docker පිළිබිඹුව වෙත ගොනු පිටපත් කිරීම පිළිබඳ ප්රශ්නය තිබිය හැක සොයා බොහෝ එය නිර්මාණය කොට ඇත අතර, (මම කළේ.)

එවැනි අවස්ථාවකදී, රූපය නිර්මාණය කිරීම සඳහා ඔබ භාවිතා කරන COPYවිධානය භාවිතා කළ හැකිය Dockerfile.

ප්‍රලේඛනය බලන්න .


4

ඔබේ දේශීය යන්ත්‍රයේ IP ලිපිනය භාවිතයෙන් ඔබට සොයාගත හැකිය

ifconfig

ඉන්පසු ඔබේ ඩෝකර් බහාලුමට ඇතුළු වී ටයිප් කරන්න

scp user_name@ip_address:/path_to_the_file destination

කෙසේ වෙතත්, ඔබ සතුව SSH ග්‍රාහකයක් සහ සේවාදායකයක් ස්ථාපනය කර නොමැති නම්, එය භාවිතයෙන් එය ස්ථාපනය කරන්න:

sudo apt-get install openssh-server

ගොඩක් ස්තූතියි, එය මට හොඳින් වැඩ කළා. ප්ලස්, වෙනත් ක්‍රමවලට වඩා එය කාර්යක්ෂම බව මට පෙනී
ගියේය

ආරක්ෂාව සම්බන්ධයෙන් මෙය භයානක විසඳුමකි.

4

ටොම්කාට් බහාලුමක් ධාවනය කරන අතරතුර තනි ගොනුවක් පිටපත් කිරීම සඳහා මෙය ඔන්ලයින් ය.

docker run -v /PATH_TO_WAR/sample.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

මෙය යුධ ගොනුව වෙබ්අප්ස් නාමාවලියට පිටපත් කර ඔබගේ යෙදුම කිසිදු වේලාවක ක්‍රියාත්මක නොකරනු ඇත.


1
-v සවිකරනු ඇත (එනම් සබැඳියක්
සාදයි


4

බහාලුම් ඉහළට සින්ටැක්ස්:

 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"

3

මා සොයාගත් බහාලුමට ලිපිගොනු පිටපත් කිරීම සඳහා හොඳම ක්‍රමය -vවන්නේ ඩොකර් ධාවන විධානය භාවිතා කරමින් ධාරකයේ නාමාවලියක් සවි කිරීමයි .


3

හොඳ පිළිතුරු ඇත, නමුත් ඉතා නිශ්චිත ය. docker psඔබ උනන්දුවක් දක්වන බහාලුම් හැඳුනුම්පත ලබා ගැනීමට හොඳ ක්‍රමයක් බව මම සොයා ගතිමි . ඉන්පසු කරන්න

mount | grep <id>

පරිමාව සවි කර ඇති ස්ථානය බැලීමට. ඒ

/var/lib/docker/devicemapper/mnt/<id>/rootfs/

මට නම්, නමුත් එය මෙහෙයුම් පද්ධතිය සහ වින්‍යාසය අනුව වෙනස් මාර්ගයක් විය හැකිය. දැන් එම මාර්ගයට ගොනු පිටපත් කරන්න.

භාවිතා -vකිරීම සැමවිටම ප්‍රායෝගික නොවේ.


3

VLC සම්පාදනය කිරීම සඳහා මම ඩොකර් භාවිතා කිරීම ආරම්භ කළෙමි, බහාලුම් වලින් ලිපිගොනු පිටපත් කිරීමට ඔබට කළ හැකි දේ මෙන්න:

su -
cd /var/lib/docker
ls -palR > /home/user/dockerfilelist.txt

එම ටෙක්ස්ට් එකේ හුරුපුරුදු ගොනුවක් සොයන්න, ඔබට ෆෝල්ඩරය ලැබෙනු ඇත, සීඩී එයට රූට් සහ වොයිලා ලෙස! ඔබට අවශ්‍ය සියල්ල පිටපත් කරන්න.

එහි "ඒකාබද්ධ" සහිත මාර්ගයක් තිබිය හැකිය, මම හිතන්නේ ඔබට එහි "වෙනස" ඇති මාර්ගය අවශ්‍ය වේ.

ඔබ කන්ටේනරයෙන් පිටවී ඔබ නතර කළ ස්ථානයට නැවත පැමිණීමට අවශ්‍ය නම්:

docker ps -a
docker start -i containerid

මම හිතන්නේ ඔබ එවැනි විධානයක් සමඟ කිසිවක් නම් නොකළ විට එය ප්‍රයෝජනවත් වේ

docker run -it registry.videolan.org:5000/vlc-debian-win64 /bin/bash

හැකර් ක්‍රමය විශ්වාසයි නමුත් ඉතින් මොකක්ද!


3
docker cp SRC_PATH CONTAINER_ID:DEST_PATH

උදාහරණයක් ලෙස, මගේ ගොනුව xxxx / download / jenkins ටොම්කාට් වෙත පිටපත් කිරීමට අවශ්‍යයි

මම ටොම්කාට් කන්ටේනරයේ හැඳුනුම්පත ලබා ගැනීමට පටන් ගනිමි

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
63686740b488        tomcat              "catalina.sh run"   12 seconds ago      Up 11 seconds       0.0.0.0:8080->8080/tcp   peaceful_babbage

docker cp xxxx/download/jenkins.war  63686740b488:usr/local/tomcat/webapps/

3

ඩොකර් සීපී විධානය යනු බහාලුමක් සහ ධාරක පද්ධතිය අතර ලිපිගොනු සහ ෆෝල්ඩර පිටපත් කිරීමට ඉඩ සලසන පහසු උපයෝගීතාවයකි.

ඔබේ සත්කාරක පද්ධතියෙන් කන්ටේනරයට ගොනු පිටපත් කිරීමට අවශ්‍ය නම්, ඔබ මේ ආකාරයට docker cp විධානය භාවිතා කළ යුතුය:

      docker cp host_source_path container:destination_path

ඩොකර් ps විධානය භාවිතා කරමින් ඔබේ ධාවන බහාලුම් පළමුව ලැයිස්තුගත කරන්න:

  abhishek@linuxhandbook:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              
  PORTS               NAMES
  8353c6f43fba        775349758637        "bash"              8 seconds ago       Up 7 
  seconds                            ubu_container

ඔබ බහාලුම් හැඳුනුම්පත හෝ බහාලුම් නම දැන සිටිය යුතුය. මගේ නඩුවේදී, ඩොකර් බහාලුම් නාමය ubu_container වේ. බහාලුම් හැඳුනුම්පත 8353c6f43fba වේ.

ලිපිගොනු සාර්ථකව පිටපත් කර ඇති බව තහවුරු කර ගැනීමට ඔබට අවශ්‍ය නම්, ඔබට පහත දැක්වෙන ආකාරයට ඔබේ කන්ටේනරය ඇතුළු කර සාමාන්‍ය ලිනක්ස් විධාන භාවිතා කළ හැකිය:

        docker exec -it ubu_container bash

ධාරක පද්ධතියේ සිට ඩොකර් බහාලුමට ලිපිගොනු පිටපත් කරන්න ඩොකර් සීපී සමඟ පිටපත් කිරීම ලිනක්ස් හි පිටපත් විධානයට සමාන වේ.

මම a.py නම් ගොනුවක් කන්ටේනරයේ නිවාස / dir1 නාමාවලියට පිටපත් කිරීමට යන්නෙමි.

        docker cp a.py ubu_container:/home/dir1

ගොනුව සාර්ථකව පිටපත් කර ඇත්නම්, ඔබට තිරයේ කිසිදු ප්‍රතිදානයක් නොපෙනේ. ගමනාන්ත මාර්ගය නොපවතී නම්, ඔබට දෝෂයක් පෙනෙනු ඇත:

        abhishek@linuxhandbook:~$ sudo docker cp a.txt ubu_container:/home/dir2/subsub
        Error: No such container:path: ubu_container:/home/dir2

ගමනාන්ත ගොනුව දැනටමත් තිබේ නම්, එය කිසිදු අනතුරු ඇඟවීමකින් තොරව නැවත ලියනු ලැබේ.

ඔබට බහාලුම් නම වෙනුවට බහාලුම් හැඳුනුම්පත භාවිතා කළ හැකිය:

        docker cp a.py 8353c6f43fba:/home/dir1

2

මගේ ප්‍රියතම ක්‍රමය:

සම්බන්ධකයින්:

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

ඩෙවිස්මැපර් මාර්ගය ඩොකර් 1.6 සමඟ ෆෙඩෝරා මත වැඩ කරන බවක් නොපෙනේ. එය වෙනම Q, stackoverflow.com/questions/29939419/… ලෙස දක්වා තිබේ නම් , ඕනෑම අදහස් දැක්වීමක් අගය කරනු ඇත.
යෝගී_ඩී
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.