Khám phá hệ thống tập tin chứa Docker


651

Tôi đã nhận thấy với docker rằng tôi cần phải hiểu những gì đang xảy ra trong một container hoặc những tập tin nào tồn tại trong đó. Một ví dụ là tải xuống hình ảnh từ chỉ mục docker - bạn không biết hình ảnh chứa gì để không thể khởi động ứng dụng.

Điều lý tưởng là có thể ssh vào chúng hoặc tương đương. Có một công cụ để làm điều này, hoặc là khái niệm của tôi về docker sai trong suy nghĩ tôi sẽ có thể làm điều này.


13
Trong các phiên bản mới nhất của Docker, một cái gì đó như thế này là có thể : docker exec <container> bash. Vì vậy, bạn chỉ cần mở một vỏ bên trong container.
dashohoxha

7
bash chạy trên một container chỉ hoạt động nếu bash được cài đặt bên trong container
Christopher Thomas

7
Tương tự, bạn có thể làm: docker exec <container> ls <dir path>docker exec <container> cat <file path>. Đối với bash tuy nhiên, thêm các -ittùy chọn.
Noam Manos


3
@ChristopherThomas, chính xác. Do đó, tôi thấy rằng cách duy nhất để thực hiện việc này là docker image save image_name > image.tarnhư được chỉ ra trong phản hồi từ @ Gaurav24.
Jaime Hablutzel

Câu trả lời:


737

CẬP NHẬT
Phương pháp dễ nhất: Sử dụng docker exec

Docker phiên bản 1.3 trở lên hỗ trợ lệnh exechoạt động tương tự nsenter. Lệnh này có thể chạy tiến trình mới trong vùng chứa đã chạy (vùng chứa phải có quá trình PID 1 đang chạy). Bạn có thể chạy /bin/bashđể khám phá trạng thái container:

docker exec -t -i mycontainer /bin/bash

xem tài liệu dòng lệnh Docker

Phương pháp thay thế 1
Chụp nhanh

Bạn có thể đánh giá hệ thống tập tin container theo cách này:

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

Bằng cách này, bạn có thể đánh giá hệ thống tập tin của container đang chạy trong thời điểm chính xác. Container vẫn đang chạy, không có thay đổi trong tương lai.

Sau này, bạn có thể xóa ảnh chụp nhanh bằng cách sử dụng (hệ thống tệp của vùng chứa đang chạy không bị ảnh hưởng!):

docker rmi mysnapshot

Phương pháp thay thế 2
ssh

Nếu bạn cần truy cập liên tục, bạn có thể cài đặt sshd vào thùng chứa của mình và chạy daemon sshd:

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D

 # you need to find out which port to connect:
 docker ps

Bằng cách này, bạn có thể chạy ứng dụng của mình bằng ssh (kết nối và thực hiện những gì bạn muốn).

CẬP NHẬT: Phương pháp thay thế 3
nsenter

Sử dụng nsenter, xem https://web.archive.org/web/20160305150559/http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/

Phiên bản ngắn là: với nsenter, bạn có thể đưa shell vào một container hiện có, ngay cả khi container đó không chạy SSH hoặc bất kỳ loại daemon có mục đích đặc biệt nào


6
nhưng lưu ý nếu bạn cần quyền truy cập vào tệp, sử dụng lệnh "docker cp" Cách sử dụng: docker cp CONTAINER: PATH HOSTPATH ​​Sao chép tệp / thư mục từ hệ thống tệp chứa vào đường dẫn máy chủ. Đường dẫn có liên quan đến thư mục gốc của hệ thống tập tin. #> docker cp 7bb0e258aefe: / etc / debian_version. #> docker cp blue_frog: / etc / hosts.
Amos Folarin

4
Tùy chọn 4 quan trọng đến mức cần được chuyển lên trên cùng và đổi tên Option 1.
tự động

5
@JanusTroelsen Nếu không có shell, bạn có thể cài đặt nó - ví dụ như trong dockerfile cho alpine linux (mà thực sự không có shell) bởi: RUN apk update && apk add bash(size: ~ 4MB)
Kamil Kiełczewski

2
theo kinh nghiệm của riêng tôi, hạn chế với Docker exec là lệnh phải được thêm vào trên một container đang chạy hoặc như một loại điểm vào. Do đó, một container bị dừng nằm ngoài phạm vi của phương pháp này.
Webdess

1
Để sử dụng sử dụng vỏ linux Windowdocker exec -t -i mycontainer /bin/sh
Jason thạc

266

CẬP NHẬT: GIẢI THÍCH!

Lệnh này sẽ cho phép bạn khám phá một container đang chạy :

docker exec -it name-of-container bash

Tương đương với điều này trong docker-compose sẽ là:

docker-compose exec web bash

(web là tên dịch vụ trong trường hợp này và theo mặc định, nó có tty.)

Một khi bạn đã vào trong:

ls -lsa

hoặc bất kỳ lệnh bash nào khác như:

cd ..

Lệnh này sẽ cho phép bạn khám phá một hình ảnh docker :

docker run --rm -it --entrypoint=/bin/bash name-of-image

một khi bên trong làm:

ls -lsa

hoặc bất kỳ lệnh bash nào khác như:

cd ..

-itviết tắt của tương tác ... và tty.


Lệnh này sẽ cho phép bạn kiểm tra một container hoặc hình ảnh docker đang chạy :

docker inspect name-of-container-or-image

Bạn có thể muốn làm điều này và tìm hiểu nếu có bất kỳ bash hoặc shtrong đó. Tìm kiếm điểm nhập hoặc cmd trong lợi nhuận json.

xem tài liệu thực hiện docker

xem tài liệu thực thi docker-compose

xem tài liệu kiểm tra docker


1
Điều này là vô cùng hữu ích, cảm ơn! Tôi cần phải kéo và thả một tệp có trong cấu trúc tệp hình ảnh docker vào một ứng dụng, nhưng điều đó sẽ không thể thực hiện được trừ khi nó được mở ở định dạng GUI. Bất cứ ý tưởng làm thế nào tôi có thể làm việc xung quanh đó?
Arkya Chatterjee

2
Điều khá rõ ràng là điều này sẽ chỉ hoạt động trên một thùng chứa đã được cài đặt bash.
Kỹ sư phần mềm

2
Đối với bất kỳ ai đang xem cách thực hiện việc này trên Windows Container / Powershell, lệnh này là docker exec -ti <name> powershell( nguồn )
ssell

1
@ssell container / hình ảnh của tôi không có powershell vì một số lý do nên docker exec -ti <name> cmdđã hoạt động. Và đối với những người mới khác như tôi, hãy đảm bảo sử dụng tên đối tượng chứa từ docker ps(giống như 070494393ca5) thay vì tên có thể đọc được mà bạn đã gán.
Simon_Weaver

1
về PowerShell trong hình ảnh github.com/aspnet/aspnet-docker/issues/362 - và nếu bạn chỉ cần cuộn tròn trên cửa sổ hình ảnh: blogs.technet.microsoft.com/virtualization/2017/12/19/...
Simon_Weaver

162

Trong trường hợp container của bạn bị dừng hoặc không có vỏ (ví dụ như hello-worldđược đề cập trong hướng dẫn cài đặt hoặc khôngalpine traefik ), đây có lẽ là phương pháp duy nhất có thể để khám phá hệ thống tệp.

Bạn có thể lưu trữ hệ thống tệp của bạn vào tệp tar:

docker export adoring_kowalevski > contents.tar

Hoặc liệt kê các tập tin:

docker export adoring_kowalevski | tar t

Lưu ý rằng tùy thuộc vào hình ảnh, có thể mất một chút thời gian và dung lượng đĩa.


12
Tôi chỉ đơn giản muốn liệt kê các nội dung của một container không cài đặt các công cụ UNIX tiêu chuẩn. Một biến thể của exportví dụ trên đã đạt được điểm:docker export adoring_kowalevski | tar tf -
berto

3
Một cảnh báo cho người không thận trọng: điều này có thể xuất rất nhiều dữ liệu (> GB) và mất nhiều thời gian.
Vince Bowdren

5
@berto không phải là một thứ đồ sộ, nhưng bạn không cần f -ở cuối lệnh, tar đọc từ đầu vào tiêu chuẩn theo mặc định. Đơn giản là docker export adoring_kowalevski | tar tlàm việc.
Shaun Bouckaert

Càng đơn giản càng tốt; tuyệt vời, cảm ơn vì tiền boa 🙌🏽
Berto

1
@ShaunBouckaert mặc định tar fphụ thuộc vào cấu hình của một người. Một phần là TAPEbiến môi trường. Những người khác được kiểm soát như là một phần của việc xây dựng. Hiệu ứng ròng là người ta không bao giờ nên cho rằng nó đọc stdin hoặc viết stdout mà luôn luôn nói rõ ràng.
roaima

42

Hệ thống tệp của bộ chứa nằm trong thư mục dữ liệu của docker, thường là trong / var / lib / docker. Để bắt đầu và kiểm tra một hệ thống tệp container đang chạy, hãy làm như sau:

hash=$(docker run busybox)
cd /var/lib/docker/aufs/mnt/$hash

Và bây giờ thư mục làm việc hiện tại là thư mục gốc của container.


3
điều này sẽ không bao gồm bất kỳ khối lượng gắn kết mặc dù.
hwjp

34

Trước khi tạo Container:

Nếu bạn khám phá cấu trúc của hình ảnh được gắn bên trong thùng chứa, bạn có thể làm

sudo docker image save image_name > image.tar
tar -xvf image.tar

Điều này sẽ cung cấp cho bạn khả năng hiển thị của tất cả các lớp của hình ảnh và cấu hình của nó có trong các tệp json.

Sau khi tạo container:

Đối với điều này đã có rất nhiều câu trả lời ở trên. cách ưa thích của tôi để làm điều này sẽ là -

docker exec -t -i container /bin/bash


Cần phải đề cập ở đây rằng việc chạy bash bên trong container chỉ hoạt động nếu bạn thực hiện nó trên máy có kiến ​​trúc giống như hình ảnh. Nếu bạn đang ở trên PC đang cố gắng nhìn trộm vào hệ thống tệp hình ảnh của raspberry pi, thì bash trick sẽ không hoạt động.
Maxim Kulkin

@MaximKulkin Thật sao? Nếu container là Linux thì không có vấn đề gì với máy chủ, nếu có sẵn bash. Có lẽ bạn đang nghĩ về Windows container?
Thorbjørn Ravn Andersen

26

Câu trả lời được đánh giá cao nhất đang hoạt động với tôi khi container thực sự bắt đầu, nhưng khi không thể chạy và ví dụ bạn muốn sao chép các tệp từ container, điều này đã lưu tôi trước đây:

docker cp <container-name>:<path/inside/container> <path/on/host/>

Nhờ docker cp ( liên kết ), bạn có thể sao chép trực tiếp từ vùng chứa vì nó là bất kỳ phần nào khác trong hệ thống tệp của bạn. Ví dụ: khôi phục tất cả các tệp trong một thùng chứa:

mkdir /tmp/container_temp
docker cp example_container:/ /tmp/container_temp/

Lưu ý rằng bạn không cần chỉ định rằng bạn muốn sao chép đệ quy.


6
Tại sao điều này không có nhiều hơn 1! chắc chắn là cách tốt nhất
Nicholas DiP Square

Điều này thậm chí còn đơn giản hơn xuất khẩu qua tar. Tôi đã phải sử dụng -L để truy cập các tệp thông qua các liên kết tượng trưng. Không cần phải chạy container!
MKaama

17

Trên Ubuntu 14.04 chạy Docker 1.3.1 , tôi đã tìm thấy hệ thống tập tin gốc chứa trên máy chủ trong thư mục sau:

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

Thông tin phiên bản Docker đầy đủ:

Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): linux/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

Hoạt động như một bùa mê: name = <name> dockerId = $ (docker tests -f {{.Id}} $ name) / var / lib / docker / devicemapper / mnt / $ dockerId / rootfs /
Florent

3
Với Ubuntu 16.10 và docker 1.12.1, điều này không may xảy ra nữa (không có devicemapperthư mục). Các tập tin tồn tại dưới /var/lib/docker/overlay/<a sha256 apparently/<upper or merged>/.... Tôi không chắc chắn mức độ di động / an toàn khi truy cập các tệp ở đó
WoJ

1
Bắt đầu từ 1.10, Docker đã giới thiệu một mô hình lưu trữ địa chỉ nội dung mới, không sử dụng UUID được tạo ngẫu nhiên, như trước đây cho cả định danh lớp và vùng chứa. Trong mô hình mới, điều này được thay thế bằng hàm băm nội dung an toàn cho lớp id. Vì vậy, phương pháp này sẽ không hoạt động nữa.
Artem Dolobanko

Đây không phải là di động và phụ thuộc nhiều vào sự lựa chọn của trình điều khiển lưu trữ . Không chắc chắn nếu giải pháp sẽ làm việc với direct-lvmví dụ.
rustyx

14

Hãy thử sử dụng

docker exec -it <container-name> /bin/bash

Có thể có khả năng bash không được thực hiện. cho rằng bạn có thể sử dụng

docker exec -it <container-name> sh

12

Tôi sử dụng một mánh khóe bẩn thỉu khác là thuyết bất khả tri / aicsperper.

Tôi nhìn vào lệnh rằng container đang chạy, ví dụ docker ps và nếu đó là một apache hoặc javatôi chỉ cần làm như sau:

sudo -s
cd /proc/$(pgrep java)/root/

và voilá bạn đang ở trong container.

Về cơ bản, bạn có thể root cd vào /proc/<PID>/root/thư mục miễn là quá trình đó được chạy bởi container. Coi chừng các liên kết tượng trưng sẽ không có ý nghĩa khi sử dụng chế độ đó.


Thông tin bổ sung về phương pháp này tại đây: superuser.com/a/1288058/195840
Eduardo Lucio

12

Câu trả lời được bình chọn nhiều nhất là tốt trừ khi thùng chứa của bạn không phải là một hệ thống Linux thực sự.

Nhiều container (đặc biệt là các container đi) không có bất kỳ nhị phân tiêu chuẩn nào (không có /bin/bashhoặc/bin/sh ). Trong trường hợp đó, bạn sẽ cần truy cập trực tiếp vào tệp container thực tế:

Hoạt động như một lá bùa:

name=<name>
dockerId=$(docker inspect -f {{.Id}} $name)
mountId=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$dockerId/mount-id)
cd /var/lib/docker/aufs/mnt/$mountId

Lưu ý: Bạn cần chạy nó dưới quyền root.


Điều này không còn hoạt động. Thư mục devicemapper không có ở đó.
0xcaff

Sẽ thật tuyệt nếu những người có câu trả lời lỗi thời sẽ dọn sạch chúng
Matthew Purdon

2
Tôi đã cập nhật lệnh để phù hợp với cấu trúc lưu trữ docker mới.
Florent

10

Trong trường hợp của tôi không có vỏ được hỗ trợ trong container ngoại trừ sh. Vì vậy, điều này làm việc như một nét duyên dáng

docker exec -it <container-name> sh


5

Điều này sẽ khởi chạy một phiên bash cho hình ảnh:

docker chạy --rm -it --entrypoint = / bin / bash


1
điều này hữu ích khi điểm truy cập mặc định không chạy
phân tích

4

Đối với tôi, cái này hoạt động tốt (nhờ những bình luận cuối cùng để chỉ ra thư mục / var / lib / docker / ):

chroot /var/lib/docker/containers/2465790aa2c4*/root/

Ở đây, 2465790aa2c4 là ID ngắn của container đang chạy (như được hiển thị bởi docker ps ), theo sau là một ngôi sao.


4

Trên các phiên bản mới hơn của Docker, bạn có thể chạy docker exec [container_name]lớp vỏ bên trong thùng chứa của mình

Vì vậy, để có được danh sách tất cả các tệp trong một container chỉ cần chạy docker exec [container_name] ls


1
Tôi đã thử điều này và nó đã không hoạt động. Khalil Gharbaoui đề nghị ở trên đã làm việc.
Nick

Điều đó làm việc cho tôi. Bạn cũng có thể thử với id container thay vì tên hình ảnh
Diwann

4

Đối với trình điều khiển docker aufs:

Tập lệnh sẽ tìm thấy thư mục gốc của container (Kiểm tra trên docker 1.7.1 và 1.10.3)

if [ -z "$1" ] ; then
 echo 'docker-find-root $container_id_or_name '
 exit 1
fi
CID=$(docker inspect   --format {{.Id}} $1)
if [ -n "$CID" ] ; then
    if [ -f  /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id ] ; then
        F1=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id)
       d1=/var/lib/docker/aufs/mnt/$F1
    fi
    if [ ! -d "$d1" ] ; then
        d1=/var/lib/docker/aufs/diff/$CID
    fi
    echo $d1
fi

4

Không có câu trả lời nào hiện có giải quyết trường hợp của một container đã thoát (và không thể khởi động lại) và / hoặc không có bất kỳ shell nào được cài đặt (ví dụ như các distroless). Cái này hoạt động miễn là bạn có quyền truy cập root vào máy chủ Docker.

Để kiểm tra thủ công thực sự, trước tiên hãy tìm ID lớp:

docker inspect my-container | jq '.[0].GraphDriver.Data'

Trong đầu ra, bạn sẽ thấy một cái gì đó như

"MergedDir": "/var/lib/docker/overlay2/03e8df748fab9526594cfdd0b6cf9f4b5160197e98fe580df0d36f19830308d9/merged"

Điều hướng vào thư mục này (với quyền root) để tìm trạng thái hiển thị hiện tại của hệ thống tệp chứa.


3

Câu trả lời này sẽ giúp những người (như bản thân tôi), những người muốn khám phá hệ thống tập tin khối lượng docker ngay cả khi container không chạy.

Danh sách các container đang chạy:

docker ps

=> ID CONTAINER "4c721f1985bd"

Nhìn vào các điểm gắn âm lượng docker trên máy vật lý cục bộ của bạn ( https://docs.docker.com/engine/tutorials/dockervolume/ ):

docker inspect -f {{.Mounts}} 4c721f1985bd

=> [{/ tmp / container-garren / tmp đúng rprivate}]

Điều này cho tôi biết rằng thư mục máy vật lý cục bộ / tmp / container-garren được ánh xạ tới đích âm lượng docker / tmp.

Biết thư mục máy vật lý cục bộ (/ tmp / container-garren) có nghĩa là tôi có thể khám phá hệ thống tập tin cho dù bộ chứa docker có chạy hay không. Điều này rất quan trọng để giúp tôi nhận ra rằng có một số dữ liệu còn sót lại không nên tồn tại ngay cả sau khi container không chạy.


1
Điều này chỉ tìm thấy một thư mục cục bộ được gắn dưới dạng một ổ đĩa bên trong container nhưng không cho phép truy cập toàn bộ hệ thống tệp của container.
Bojan Komazec

3

một mẹo khác là sử dụng công cụ nguyên tử để làm một cái gì đó như:

mkdir -p /path/to/mnt && atomic mount IMAGE /path/to/mnt

Hình ảnh Docker sẽ được gắn vào / path / to / mnt để bạn kiểm tra nó.


Nhưng bạn cần phải có các thùng chứa được chế tạo đặc biệt để làm việc này, phải không? Có lẽ bạn nên thêm nó như một lời cảnh báo, vì hầu hết mọi người sẽ không thể bán nó cho nhóm / công ty của họ như một giải pháp ...
Angelos Pikoulas

3

Chỉ dành cho LINUX

Cách đơn giản nhất mà tôi sử dụng là sử dụng Proc dir, đó là container phải được chạy để kiểm tra các tập tin container docker.

  1. Tìm ra id quá trình (PID) của container và lưu trữ vào một số biến

    PID = $ (docker tests -f '{{.State.Pid}}' your-container-name-here)

  2. Đảm bảo quy trình chứa đang chạy và sử dụng biến nameto vào thư mục chứa

    cd / Proc / $ PID / root

Nếu bạn muốn vượt qua thư mục mà không tìm ra số PID chỉ bằng cách sử dụng lệnh dài này

cd /proc/$(docker inspect -f '{{.State.Pid}}' your-container-name-here)/root

Lời khuyên:

Sau khi bạn vào bên trong container, mọi thứ bạn làm sẽ ảnh hưởng đến quá trình thực tế của container, chẳng hạn như dừng dịch vụ hoặc thay đổi số cổng.

Hy vọng nó giúp

Ghi chú:

Phương pháp này chỉ hoạt động nếu container vẫn chạy, nếu không thư mục sẽ không còn tồn tại nếu container bị dừng hoặc xóa


2

Cách ưa thích của tôi để hiểu những gì đang diễn ra bên trong container là:

  1. phơi bày -p 8000

    docker run -it -p 8000:8000 image
    
  2. Bắt đầu máy chủ bên trong nó

    python -m SimpleHTTPServer
    

2

Đối với một container đã chạy, bạn có thể làm:

dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])

cd /var/lib/docker/btrfs/subvolumes/$dockerId

Bạn cần phải root để cd vào thư mục đó. Nếu bạn chưa root, hãy thử 'sudo su' trước khi chạy lệnh.

Chỉnh sửa: Theo v1.3, xem câu trả lời của Jiri - tốt hơn.


4
Tôi mạnh mẽ một phần là "sudo -i" chứ không phải là "sudo su" bởi vì có rất ít lý do để chạy một chương trình suid khởi chạy một chương trình suid khác để khởi chạy shell. Cắt người giữa. :)
dannysauer

Câu trả lời của bạn là rất tốt, chỉ có con đường là không. Bạn nên sử dụng đường dẫn của piercebot.
Florent

2

Nếu bạn đang sử dụng Docker v19.03, bạn làm theo các bước dưới đây.

# find ID of your running container:

  docker ps

# create image (snapshot) from container filesystem

  docker commit 12345678904b5 mysnapshot

# explore this filesystem 

  docker run -t -i mysnapshot /bin/sh

1

Nếu bạn đang sử dụng trình điều khiển lưu trữ AUFS, bạn có thể sử dụng tập lệnh lớp docker của tôi để tìm bất kỳ lớp gốc hệ thống tập tin chứa (mnt) và lớp readwrite nào:

# docker-layer musing_wiles
rw layer : /var/lib/docker/aufs/diff/c83338693ff190945b2374dea210974b7213bc0916163cc30e16f6ccf1e4b03f
mnt      : /var/lib/docker/aufs/mnt/c83338693ff190945b2374dea210974b7213bc0916163cc30e16f6ccf1e4b03f

Chỉnh sửa 2018-03-28:
lớp docker đã được thay thế bằng docker-backup


1

Các docker execlệnh để chạy một lệnh trong một container chạy có thể giúp đỡ trong nhiều trường hợp.

Cách sử dụng: docker exec [TÙY CHỌN] CONTAINER HÀNH [ARG ...]

Chạy một lệnh trong một container đang chạy

Tùy chọn:
  -d, --detach Chế độ tách rời: chạy lệnh trong nền
      --detach-key chuỗi Ghi đè chuỗi khóa để tách một
                             thùng đựng hàng
  -e, --env list Đặt các biến môi trường
  -i, - tương tác Giữ STDIN mở ngay cả khi không được đính kèm
      --privileged Cung cấp đặc quyền mở rộng cho lệnh
  -t, --tty Phân bổ một giả TTY
  -u, --user Tên người dùng hoặc UID (định dạng:
                             [:])
  -w, --workdir chuỗi Thư mục làm việc bên trong container

Ví dụ :

1) Truy cập bash vào hệ thống tập tin container đang chạy:

docker exec -it containerId bash 

2) Truy cập bash vào hệ thống tập tin container đang chạy với quyền root để có thể có các quyền bắt buộc:

docker exec -it -u root containerId bash  

Điều này đặc biệt hữu ích để có thể thực hiện một số xử lý như root trong một container.

3) Truy cập bash vào hệ thống tập tin container đang chạy với một thư mục làm việc cụ thể:

docker exec -it -w /var/lib containerId bash 

0

Bạn có thể chạy bash bên trong container với điều này: $ docker run -it ubuntu /bin/bash

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.