เรียกใช้อิมเมจ Docker เป็นคอนเทนเนอร์


604

ฉันสร้างภาพนักเทียบท่าจาก dockerfile ฉันเห็นภาพถูกสร้างเรียบร้อยแล้ว แต่ฉันจะทำอย่างไรกับมัน? มันจะไม่สามารถเรียกใช้เป็นคอนเทนเนอร์ได้หรือไม่

คำตอบ:


855

วิธีการใช้งานที่เฉพาะเจาะจงนั้นขึ้นอยู่กับว่าคุณให้แท็ก / ชื่อภาพหรือไม่

$ docker images
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        4 months ago        131.5 MB (virtual 131.5 MB)

ด้วยชื่อ (ลองใช้Ubuntu ):

$ docker run -i -t ubuntu:12.04 /bin/bash

ไม่มีชื่อให้ใช้ ID:

$ docker run -i -t 8dbd9e392a96 /bin/bash

โปรดดูการอ้างอิงการทำงานของนักเทียบท่าสำหรับข้อมูลเพิ่มเติม


4
ดังนั้นชื่อที่เป็นมิตรกับมนุษย์ที่พิมพ์ภายใต้ 'NAME' ใน docker ps -aจึงไม่มีประโยชน์ใช่ไหม
ThorSummoner

11
docker psแสดงรายการคอนเทนเนอร์ไม่ใช่รูปภาพ docker commitหากคุณต้องการที่จะสร้างภาพจากภาชนะที่คุณต้อง คุณสามารถใช้NAMEในกระทำ (เช่นdocker commit _NAME_ _imagename_)
แอนดี้

8
@ ทำไมพวกเราถึงใช้ / bin / bash ในตอนท้าย? ฉันยังใหม่อยู่
Raheel

6
@RaheelKhan Becaue ภาพนักเทียบท่าของคุณต้องการบางสิ่งบางอย่างที่จะทำงาน คุณสามารถแทนที่ด้วยโปรแกรมที่คุณติดตั้ง / bin / bash เป็นเพียงเปลือกแบบพกพาที่ติดตั้งแล้ว
Ryan Shillington

หากคุณต้องการเพิ่มตัวแปรสภาพแวดล้อมคุณสามารถทำการเทียบท่ารัน -i -t -e ROOT_PASSWORD = รูตอูบุนตู: 12.04
Balaji Radhakrishnan

70

ทำตามขั้นตอนต่อไปนี้:

  1. $ docker images

    คุณจะได้รับรายการอิมเมจ Docker ท้องถิ่นทั้งหมดพร้อมแท็กที่ระบุ

  2. $ docker run image_name:tag_name

    หากคุณไม่ได้ระบุtag_nameมันจะเรียกใช้รูปภาพโดยอัตโนมัติด้วยแท็ก 'ล่าสุด'

    แทนที่จะimage_nameคุณยังสามารถระบุรหัสภาพ (ไม่ tag_name)


35
  • ในการแสดงรายการภาพ Docker

    $ docker images
    
  • หากแอปพลิเคชันของคุณต้องการเรียกใช้ด้วยพอร์ต 80 และคุณสามารถเปิดเผยพอร์ตอื่น ๆ เพื่อผูกภายในเครื่องให้พูด 8080:

    $ docker run -d --restart=always -p 8080:80 image_name:version
    

21

คุณสามารถดูรูปภาพที่มีอยู่โดยใช้:

docker images

จากนั้นคุณสามารถเรียกใช้ในโหมดเดี่ยวดังนั้นเทอร์มินัลของคุณยังคงใช้งานได้ คุณมีหลายตัวเลือกในการรันโดยใช้ชื่อที่เก็บ (มีหรือไม่มีแท็ก) หรือรหัสรูปภาพ:

docker run -d repository
docker run -d repository:tag
docker run -d image_id

จากนั้นคุณสามารถตรวจสอบคอนเทนเนอร์ที่ใช้งานอยู่

docker ps

docker psให้ ID คอนเทนเนอร์ คุณสามารถใช้มันหรือเพียงแค่ตัวอักษรแรก 2/3 เพื่อไปที่ภาชนะของคุณโดยใช้:

docker exec -it container_id /bin/bash

และคุณสามารถหยุดมันได้ใช้และdocker stop container_iddocker rm container_id

นอกจากนี้คุณยังสามารถเรียกใช้คอนเทนเนอร์ด้วย-rmข้อโต้แย้งดังนั้นหากคุณหยุดคอนเทนเนอร์ของคุณมันจะถูกลบโดยอัตโนมัติ


1
--rm (หมายเหตุ: 2 ขีดกลางไม่ใช่ตัวเลือกเดียว) คือทองคำ !!! ระบบของฉันเกลื่อนไปด้วยภาชนะบรรจุที่หยุดทำงาน (ตาย)
Johan Snowgoose

13

รับชื่อหรือรหัสของภาพที่คุณต้องการเรียกใช้โดยใช้คำสั่งนี้:

docker images

คำสั่งเรียกใช้ Docker ใช้วิธีดังต่อไปนี้:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

ด้านล่างฉันได้รวมตัวเลือกการจัดส่งชื่อเผยแพร่ปริมาณและเริ่มต้นใหม่ก่อนระบุชื่อภาพหรือรหัส:

docker run -d --name  container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name

ที่ไหน:

--detach , -d        Run container in background and print container ID
--name                Assign a name to the container
--publish , -p        Publish a container’s port(s) to the host
--volume , -v        Bind mount a volume
--restart            Restart policy to apply when a container exits

สำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบอย่างเป็นทางการหางอ้างอิงวิ่ง


5

นี่คือตัวอย่างการเรียกใช้บริการ webdev ใน Docker ชื่อภาพคือmorrisjobke / WebDAV คุณสามารถดึงมันออกมาจากหาง Hub

หลังจากที่คุณเรียกภาพเหล่านี้แล้วคุณสามารถเข้าถึงWebDAVhttp://localhost:8888/webdavอินสแตนซ์ที่ ภายในโฟลเดอร์/var/webdavจะใช้เป็นรูท WebDAV

คุณสามารถเรียกใช้คอนเทนเนอร์นี้ด้วยวิธีต่อไปนี้:

$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav

เรื่อง"เรียกใช้บริการ webdev" : คุณหมายถึง"run a WebDAV service"หรือไม่? หรือ"เรียกใช้บริการการพัฒนาเว็บ" ?
ปีเตอร์มอร์เทนเซ่น

5

ผมมีปัญหาเดียวกัน. ฉันใช้อิมเมจ Docker และสร้างคอนเทนเนอร์ด้วย CONTAINER_ID เฉพาะ ฉันต้องการทำงานกับคอนเทนเนอร์เดียวกัน:

ขั้นแรกให้เรียกใช้อิมเมจ Docker ของคุณ:

docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

จากนั้นทำรายการคอนเทนเนอร์ทั้งหมดที่คุณทำ:

sudo docker ps -a

และเลือกคอนเทนเนอร์ที่คุณต้องการใช้งาน (ฉันเป็น 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

เนื่องจากคุณได้สร้างภาพจาก Dockerfile ภาพในปัจจุบันจึงไม่อยู่ในสถานะใช้งาน ในการทำงานคุณจำเป็นต้องเรียกใช้ภาพนี้ภายในคอนเทนเนอร์

$ docker imagesคำสั่งอธิบายวิธีหลายภาพมีอยู่ในปัจจุบันในพื้นที่เก็บข้อมูลท้องถิ่น และ

docker ps -a

แสดงจำนวนตู้คอนเทนเนอร์ที่มีอยู่ในปัจจุบันเช่นรายการของภาชนะที่ใช้งานและออก

มีสองวิธีในการเรียกใช้อิมเมจในคอนเทนเนอร์:

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

ในโหมดเดี่ยว:

-d=false: Detached mode: Run container in the background, print new container id

ในโหมดโต้ตอบ:

-i :Keep STDIN open even if not attached

นี่คือคำสั่ง Run Docker

$ docker run image_name:tag_name

สำหรับคำชี้แจงเพิ่มเติมเกี่ยวกับการเทียบท่าวิ่งคุณสามารถเยี่ยมชมหางอ้างอิงวิ่ง

เป็นวัสดุที่ดีที่สุดในการเข้าใจนักเทียบท่า


2

ในการดูรายการภาพทั้งหมดบนโฮสต์ Docker ของคุณให้เรียกใช้:

  $ docker images
   REPOSITORY          TAG           IMAGE ID            CREATED             SIZE
   apache_snapshot     latest        13037686eac3        22 seconds ago      249MB
   ubuntu              latest        00fd29ccc6f1        3 weeks ago         111MB

ตอนนี้คุณสามารถเรียกใช้อิมเมจ Docker เป็นคอนเทนเนอร์ในโหมดโต้ตอบ:

   $ docker run -it apache_snapshot /bin/bash

หรือหากคุณไม่มีภาพในเครื่องให้ค้นหา Docker Hub เพื่อดาวน์โหลดภาพ:

    $ docker search ubuntu
    NAME                            DESCRIPTION             STARS  OFFICIAL  AUTOMATED
    ubuntu                          Ubuntu is a Debian...   6759   [OK]       
    dorowu/ubuntu-desktop-lxde-vnc  Ubuntu with openss...   141              [OK]
    rastasheep/ubuntu-sshd          Dockerized SSH ser...   114              [OK]
    ansible/ubuntu14.04-ansible     Ubuntu 14.04 LTS w...   88               [OK]
    ubuntu-upstart                  Upstart is an even...   80     [OK]

ดึงอิมเมจ Docker จากที่เก็บด้วยคำสั่ง puller:

     $ docker pull ubuntu

เรียกใช้อิมเมจ Docker เป็นคอนเทนเนอร์:

     $ docker run -it ubuntu /bin/bash

0
$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED            
jamesmedice/marketplace   latest              e78c49b5f380        2 days ago          
jamesmedice/marketplace   v1.0.0              *e78c49b5f380*        2 days ago          


$ docker run -p 6001:8585 *e78c49b5f380*

1
คำอธิบายจะอยู่ในลำดับ
Peter Mortensen

-1

สำหรับผู้ที่มีปัญหาเดียวกันเช่นกัน แต่พบข้อผิดพลาดเช่น

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"

ฉันเพิ่มจุดเริ่มต้นที่เหมาะกับฉัน:

docker run -it --entrypoint /bin/sh สำหรับภาพที่ไม่มี Bash

ตัวอย่าง (จากตัวอย่างที่อนุมัติ):

run -it --entrypoint /bin/sh ubuntu:12.04

ข้อมูลอ้างอิง: https://gist.github.com/mitchwongho/11266726

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.