ฉันจะเข้าสู่เชลล์ของคอนเทนเนอร์ Docker ได้อย่างไร


1161

ฉันเริ่มต้นทำงานกับ Docker ฉันใช้อิมเมจพื้นฐานของ WordPress และเขียนเรียงต่อกัน

ฉันพยายามที่จะ ssh เป็นหนึ่งในภาชนะเพื่อตรวจสอบไฟล์ / ไดเรกทอรีที่สร้างขึ้นในช่วงเริ่มต้นสร้าง ฉันพยายามวิ่งdocker-compose run containername ls -laแต่นั่นก็ไม่ได้ทำอะไรเลย แม้ว่ามันจะเป็นเช่นนั้นฉันก็ควรมีคอนโซลที่ฉันสามารถสำรวจโครงสร้างไดเรกทอรีแทนที่จะใช้คำสั่งเดียว วิธีที่ถูกต้องในการทำเช่นนี้กับนักเทียบท่าคืออะไร?


ดังนั้นดูเหมือนว่าคำตอบคือแนบนักเทียบท่า แต่ฉันจะไปได้อย่างไรจากนักแต่งเพลง?
Andrew

3
ใช้askubuntu.com/a/543057/35816docker exec รับรหัสคอนเทนเนอร์โดยใช้docker ps
Mauricio Scheffer

26
sudo docker run -it --entrypoint /bin/bash <container_name>พาคุณเข้าไปในภาชนะบรรจุแบบโต้ตอบ จากนั้นหนึ่งสามารถตรวจสอบระบบไฟล์ในภาชนะโดยใช้cd <path>
Sergei

คำตอบ:


1731

docker attachจะช่วยให้คุณเชื่อมต่อกับภาชนะหางของคุณ sshแต่นี้ไม่ได้จริงๆสิ่งเดียวกับ ตัวอย่างเช่นหากคอนเทนเนอร์ของคุณกำลังใช้เว็บเซิร์ฟเวอร์docker attachอาจเชื่อมต่อคุณกับstdoutของกระบวนการเซิร์ฟเวอร์เว็บ ไม่จำเป็นว่าจะต้องให้เปลือกแก่คุณ

docker execคำสั่งอาจเป็นสิ่งที่คุณกำลังมองหา; สิ่งนี้จะช่วยให้คุณเรียกใช้คำสั่งโดยพลการภายในคอนเทนเนอร์ที่มีอยู่ ตัวอย่างเช่น:

docker exec -it <mycontainer> bash

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

ในคำสั่งดัง<mycontainer>กล่าวเป็นชื่อหรือ ID ของภาชนะเป้าหมาย ไม่สำคัญว่าคุณจะใช้docker composeหรือไม่ เพียงแค่เรียกใช้docker psและใช้ ID (สตริงเลขฐานสิบหกที่แสดงในคอลัมน์แรก) หรือชื่อ (แสดงในคอลัมน์สุดท้าย) เช่นได้รับ:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

ฉันวิ่งได้:

$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever

ฉันสามารถทำสิ่งเดียวกันให้สำเร็จได้ด้วยการวิ่ง:

$ docker exec -it d2d4a89aaee9 ip addr

ในทำนองเดียวกันฉันสามารถเริ่มเปลือกในภาชนะ;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$

76
นอกจากนี้docker execจะทำงานเฉพาะในการทำงานภาชนะ (มิฉะนั้นใช้docker run -it --entrypoint /bin/bashหรือคล้ายกัน)
L0j1k

59
เพื่อความสะดวกของคุณ-itคือการรวมกันของ-iและ-tซึ่งเป็น--interactive("เปิด STDIN แม้ว่าจะไม่ได้แนบ") ตามลำดับ--tty("จัดสรรหลอก -TTY")
Adrian Föder

23
บนคอนเทนเนอร์ที่ใช้ Alpine Linux คุณอาจไม่มี bash ดังนั้นถ้าใช่ให้ใช้ sh แทน
Robin Green

9
@ L0j1k มันเป็นdocker run -it --entrypoint /bin/bash <imageid> --any --more --argsเพียงเพื่อชี้แจงสำหรับคน
อเล็กซานเดมิลส์

2
@AlexanderMills ใช่และเพื่อชี้แจงเพิ่มเติมผู้ที่--any --more --argsคุณจะได้รับการป้อนเข้าสู่สิ่งที่ภาพได้กำหนดไว้เป็นCMDไม่ใช่ Docker (หรือถ้ารูปภาพของคุณกำหนดเพียงENTRYPOINTและไม่ใช่CMDตัวเลือกเหล่านี้จะถูกป้อนเข้า/bin/bashตามที่คุณระบุไว้ที่นี่ ) ดังนั้นสำหรับตัวอย่างอื่น ๆdocker runตัวเลือก (เช่น--net "host") <imageid>จำเป็นต้องไปก่อน
L0j1k

302

หากต้องการทุบตีลงในภาชนะที่ใช้งานให้พิมพ์สิ่งนี้:

docker exec -t -i container_name /bin/bash

หรือ

docker exec -ti container_name /bin/bash

หรือ

docker exec -ti container_name sh

สมมติว่าเป็นคอนเทนเนอร์ Linux?
Peter Mortensen

5
/ bin / bash ไม่จำเป็นต้องใช้เพียงทุบตีสำหรับฉัน
Anand Varkey Philips

6
ฉันต้องการdocker exec -itแทนที่docker exec -t -i
VaTo

@VaTo ต่างกันอย่างไร
AATHITH RAJENDRAN

@AATHITHRAJENDRANI ต้องการรูปแบบที่สั้นกว่าของคำสั่งแทนที่จะมีสองสถานะคุณสามารถรวมสองตัวเลือกเหล่านี้ในอาร์กิวเมนต์เดียวกันได้
VaTo

85

สมมติว่าสำหรับเหตุผลที่เป็นของคุณเองคุณต้องการใช้ SSH จริงๆ ใช้เวลาเพียงไม่กี่ก้าว แต่ก็สามารถทำได้ นี่คือคำสั่งที่คุณจะเรียกใช้ภายในคอนเทนเนอร์เพื่อตั้งค่า ...

apt-get update
apt-get install openssh-server

mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd

useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password

apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)

ตอนนี้คุณสามารถรันแอปพลิเคชั่นกราฟิก (ถ้าติดตั้งในคอนเทนเนอร์) โดยใช้ X11 การส่งต่อไปยังไคลเอ็นต์ SSH:

ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client

นี่คือแหล่งข้อมูลที่เกี่ยวข้อง:


33

หากคุณอยู่ที่นี่กำลังมองหาคำตอบเฉพาะสำหรับนักเขียน Docker อย่างฉันมันให้วิธีง่าย ๆ โดยไม่ต้องค้นหา ID คอนเทนเนอร์ที่สร้างขึ้น

docker-compose execใช้ชื่อของบริการตามdocker-compose.ymlไฟล์ของคุณ

เพื่อรับ Bash shell สำหรับบริการ 'เว็บ' ของคุณคุณสามารถทำได้:

$ docker-compose exec web bash

docker-compose runทำงานได้ดีหากคอนเทนเนอร์ของคุณยังไม่มีอยู่
พอล

23

คำเตือน : คำตอบนี้ส่งเสริมเครื่องมือที่ฉันเขียน

ฉันได้สร้างเซิร์ฟเวอร์ SSH containerized ที่คุณสามารถ 'ติด' กับคอนเทนเนอร์ที่ใช้งานอยู่ ด้วยวิธีนี้คุณสามารถสร้างองค์ประกอบที่มีทุกภาชนะ ข้อกำหนดเพียงอย่างเดียวคือคอนเทนเนอร์มี Bash

ตัวอย่างต่อไปนี้จะเริ่มต้นเซิร์ฟเวอร์ SSH ที่แนบมากับคอนเทนเนอร์ที่มีชื่อ 'my-container'

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

เมื่อคุณเชื่อมต่อกับบริการ SSH นี้ (ด้วย SSH ไคลเอ็นต์ที่คุณเลือก) เซสชัน Bash จะเริ่มขึ้นในคอนเทนเนอร์ที่มีชื่อ 'my-container'

สำหรับคำแนะนำและเอกสารเพิ่มเติมโปรดดู: https://github.com/jeroenpeeters/docker-ssh


1
นั่นหวานมาก ข้อได้เปรียบที่สำคัญของการทำเช่นนี้คือคุณจะได้รับเครื่องปลายทางที่ใช้งานได้อย่างสมบูรณ์ เมื่อฉันใช้วิธี "นักเทียบท่า exec" ฉันก็ไม่สามารถลบเนื้อหาของเทอร์มินัลlessได้แสดงคำเตือนทุกครั้งที่ฉันเรียกใช้ ฯลฯ การใช้คอนเทนเนอร์ของ Jeroen ทำให้ฉันมีประสบการณ์ที่ดีขึ้นมาก เพียงให้แน่ใจว่าได้ตรวจสอบเอกสาร คำสั่งตัวอย่างในการตอบสนองดูเหมือนจะไม่ถูกต้องอีกต่อไป
Rafał G.

1
มันเป็นเครื่องมือที่ยอดเยี่ยม คุณรู้หรือไม่ว่าฉันจะใช้เป็นตัวแทนนักวางท่อส่งเจนกินส์ได้อย่างไร ฉันต้องการให้เจนกินส์ถ่ายโอนไฟล์บางไฟล์โดย SCP ไปยังโฮสต์ระยะไกลและดำเนินการกับ SSH
Gilson

21

หากคุณกำลังใช้ Docker บน Windows และต้องการเข้าถึงเชลล์ไปยังคอนเทนเนอร์ให้ใช้สิ่งนี้:

winpty docker exec -it <container_id> sh

เป็นไปได้มากว่าคุณได้ติดตั้งGit Bashแล้ว หากคุณไม่แน่ใจให้ทำการติดตั้ง


1
ทึกทักคอนเทนเนอร์ Linux Docker หรือไม่?
Peter Mortensen

1
นักเทียบท่า exec -ti <container_id> cmd ทำงานได้ดี
PBo

17

หากคอนเทนเนอร์ออกแล้ว (อาจเกิดจากข้อผิดพลาดบางอย่าง) คุณสามารถทำได้

$ docker run --rm -it --entrypoint /bin/ash image_name

หรือ

$ docker run --rm -it --entrypoint /bin/sh image_name

หรือ

$ docker run --rm -it --entrypoint /bin/bash image_name

เพื่อสร้างคอนเทนเนอร์ใหม่และรับเชลล์ลงไป ตั้งแต่คุณระบุ --rm คอนเทนเนอร์จะถูกลบเมื่อคุณออกจากเชลล์


16

ในบางกรณีรูปภาพของคุณอาจเป็นแบบอัลไพน์ ในกรณีนี้มันจะโยน:

OCI runtime exec ล้มเหลว: exec ล้มเหลว: container_linux.go: 348: กระบวนการคอนเทนเนอร์เริ่มต้นทำให้เกิด "exec: \" bash \ ": ไม่พบไฟล์ปฏิบัติการใน $ PATH": ไม่ทราบ

เพราะ/bin/bashไม่มีอยู่จริง แทนที่จะเป็นเช่นนี้คุณควรใช้:

docker exec -it 9f7d99aa6625 ash

หรือ

docker exec -it 9f7d99aa6625 sh

15

SSH ลงในคอนเทนเนอร์ Docker โดยใช้คำสั่งนี้:

sudo docker exec -i -t (container ID) bash

12

ในการเชื่อมต่อกับ cmd ในคอนเทนเนอร์ Windows ให้ใช้

docker exec -it d8c25fde2769 cmd

โดยที่d8c25fde2769เป็น id คอนเทนเนอร์


11

มันง่าย !

แสดงรายการภาพ Docker ทั้งหมดของคุณ:

sudo docker images

ในระบบของฉันมันแสดงผลลัพธ์ต่อไปนี้:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bash                latest              922b9cc3ea5e        9 hours ago
14.03 MB
ubuntu              latest              7feff7652c69        5 weeks ago         81.15 MB

ฉันมีภาพ Docker สองภาพบนพีซีของฉัน สมมติว่าฉันต้องการเรียกใช้ครั้งแรก

sudo docker run -i -t ubuntu:latest /bin/bash

สิ่งนี้จะทำให้คุณควบคุมเทอร์มินัลของคอนเทนเนอร์ ตอนนี้คุณสามารถทำการเชลล์ทุกชนิดภายในคอนเทนเนอร์ได้ เช่นเดียวกับที่ทำlsจะส่งออกโฟลเดอร์ทั้งหมดในรูทของระบบไฟล์

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

11

ในการตรวจสอบไฟล์ให้เรียกใช้docker run -it <image> /bin/shเทอร์มินัลแบบโต้ตอบ docker imagesรายชื่อของภาพที่สามารถรับได้โดย ในทางตรงกันข้ามกับdocker execวิธีการแก้ปัญหานี้ยังทำงานในกรณีที่ภาพไม่เริ่มต้น (หรือออกจากทันทีหลังจากทำงาน)


สันนิษฐานว่าเป็นอิมเมจ Linux Docker หรือไม่
Peter Mortensen

10

โซลูชั่น GOINSIDE

ติดตั้งgoinsideเครื่องมือบรรทัดคำสั่งด้วย:

sudo npm install -g goinside

และเข้าไปในคอนเทนเนอร์ของนักเทียบท่าที่มีขนาดเทอร์มินัลที่เหมาะสมด้วย:

goinside docker_container_name

คำตอบเก่า

เราได้วางตัวอย่างนี้ใน~/.profile:

goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside

สิ่งนี้ไม่เพียงทำให้ทุกคนสามารถเข้าไปในคอนเทนเนอร์ที่ทำงานด้วย:

goinside containername

นอกจากนี้ยังแก้ปัญหาที่ยาวนานเกี่ยวกับขนาดเทอร์มินัลคอนเทนเนอร์แบบคงที่ปัญหาเกี่ยวกับการคงเทียบท่าตู้คอนเทนเนอร์ขนาดขั้วซึ่งน่ารำคาญมากถ้าคุณเผชิญ

นอกจากนี้หากคุณไปที่ลิงก์คุณจะได้รับคำสั่งสำหรับชื่อคอนเทนเนอร์นักเทียบท่าของคุณด้วย


1
ขอบคุณ มันใช้งานได้อย่างมีเสน่ห์อย่างน้อยสำหรับรูปภาพที่มีทุบตีมาแล้ว อาจไม่ทำงานสำหรับรูปภาพที่ใช้อัลไพน์ แต่สามารถแก้ไขได้ด้วยฟังก์ชั่นที่แตกต่างกันที่เขียนขึ้นโดยเฉพาะสำหรับ sh / ash ฯลฯ
Gaurav Bhaskar

8
$ docker exec -it <Container-Id> /bin/bash

หรือขึ้นอยู่กับเปลือกหอยก็สามารถ

$ docker exec -it <Container-Id> /bin/sh

คุณสามารถรับcontainer-Idผ่านทางdocker psคำสั่ง

-i = แบบโต้ตอบ

-t = เพื่อจัดสรร psuedo-TTY


8

ฉันสร้างฟังก์ชันเทอร์มินัลเพื่อให้เข้าถึงเทอร์มินัลของคอนเทนเนอร์ได้ง่ายขึ้น อาจเป็นประโยชน์กับพวกคุณเช่นกัน:

ดังนั้นผลลัพธ์คือแทนที่จะพิมพ์:

docker exec -it [container_id] /bin/bash

คุณจะเขียน:

dbash [container_id]

วางสิ่งต่อไปนี้ใน ~ / .bash_profile (หรืออะไรก็ได้ที่เหมาะกับคุณ) จากนั้นเปิดหน้าต่างเทอร์มินัลใหม่และเพลิดเพลินกับทางลัด:

#usage: dbash [container_id]
dbash() {
    docker exec -it "$1" /bin/bash
}

7

คุณสามารถโต้ตอบกับเทอร์มินัลในคอนเทนเนอร์นักเทียบท่าโดยผ่านตัวเลือก -ti

docker run --rm -ti <image-name>
eg: docker run --rm -ti ubuntu

-t ย่อมาจาก terminal -i หมายถึงการโต้ตอบ


6

docker execจะเป็นทางออกแน่นอน วิธีง่าย ๆ ในการทำงานกับคำถามที่คุณถามคือการติดตั้งไดเรกทอรีภายใน Docker ไปยังไดเรกทอรีของระบบภายในเครื่องติดตั้งไดเรกทอรีภายในหางไปยังไดเรกทอรีระบบท้องถิ่น

เพื่อให้คุณสามารถดูการเปลี่ยนแปลงในเส้นทางท้องถิ่นได้ทันที

docker run -v /Users/<path>:/<container path> 

1
คำสั่งของคุณกำลังติดตั้งไดเรกทอรีของโฮสต์ลงในคอนเทนเนอร์
Demonbane

ใช่ ใช้การสำรองข้อมูลไปยังไดเรกทอรีอื่นแล้วกำหนดใช้ไดรฟ์ข้อมูลแล้วย้ายข้อมูลสำรองไปยังโฟลเดอร์ที่เมาท์
Pratik

6

ใช้:

docker attach <container name/id here>

อีกวิธีหนึ่งแม้ว่าจะมีอันตรายอยู่ก็คือการใช้attachแต่ถ้าคุณCtrl+ Cเพื่อออกจากเซสชันคุณจะหยุดคอนเทนเนอร์ด้วย docker logs -fหากคุณเพียงแค่ต้องการที่จะเห็นสิ่งที่เกิดขึ้นการใช้งาน

:~$ docker attach --help
Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)


4

หากคุณติดตั้ง Docker ด้วยKitematicคุณสามารถใช้ GUI เปิดKitematicจากไอคอน Docker และในKitematicหน้าต่างเลือกคอนเทนเนอร์ของคุณจากนั้นคลิกที่execไอคอน

คุณสามารถดูบันทึกคอนเทนเนอร์และข้อมูลคอนเทนเนอร์มากมาย (ในแท็บการตั้งค่า) ใน GUI นี้ด้วย

เลือก Kitematic จากเมนู

คลิกที่ exec


2

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

ip
route
netstat
ps
...

ฉันตรวจสอบทุกคำตอบเหล่านี้ไม่มีประโยชน์สำหรับฉัน ฉันค้นหาข้อมูลในเว็บไซต์อื่น ๆ ฉันจะไม่เพิ่ม super link ที่นี่เนื่องจากมันไม่ได้เขียนเป็นภาษาอังกฤษ ดังนั้นฉันเพิ่งโพสต์นี้ด้วยวิธีการสรุปสำหรับผู้ที่มีความต้องการเช่นเดียวกับฉัน

สมมติว่าคุณมีหนึ่งคอนเทนเนอร์ที่รันชื่อ light-test ทำตามขั้นตอนด้านล่าง

  • docker inspect light-test -f {{.NetworkSettings.SandboxKey}}. /var/run/docker/netns/xxxxคำสั่งนี้จะได้รับการตอบเช่น
  • ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxxแล้วก็ ไดเรกทอรีอาจไม่มีอยู่ให้ทำmkdir /var/run/netnsก่อน
  • ตอนนี้คุณสามารถดำเนินip netns exec xxxx ip addr showการสำรวจโลกเครือข่ายในคอนเทนเนอร์

PS xxxxเป็นค่าเดียวกันที่ได้รับจากคำสั่งแรกเสมอ และแน่นอนคำสั่งอื่น ๆ ip netns exec xxxx netstat -antp|grep 8080ที่ถูกต้องคือ


1

อีกตัวเลือกหนึ่งคือการใช้nsenter

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid

2
มีปัญหาหลายอย่างด้วยnsenterกัน อย่างแรกคือคุณต้องมีการเข้าถึงทางกายภาพไปยังโฮสต์นักเทียบท่าซึ่งไม่ได้รับ (คุณอาจทำงานกับ API นักเทียบท่าระยะไกล) นอกจากนี้การทำงานภายใต้ข้อnsenterยกเว้นของคุณจากข้อ จำกัด ด้านความปลอดภัยและทรัพยากรที่นักเทียบท่าวางไว้ (ซึ่งอาจเป็นมืออาชีพหรือผู้ควบคุมขึ้นอยู่กับสภาพแวดล้อมของคุณ)
larsks

1
แม้แต่ผู้เขียน nsenter ก็บอกว่าจะใช้docker execวันนี้
L0j1k

1
@ larsks ใช่ทั้งสองมีผลประโยชน์ของตัวเอง ตัวอย่างเช่นนี้เป็นประโยชน์ของ nsenter docker execกว่า docker execดูสง่างามมากขึ้นสำหรับฉัน
xuhdev

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

1

หากคุณกำลังใช้ Docker Compose การดำเนินการนี้จะนำคุณเข้าสู่ภาชนะ Docker

docker-compose run container_name /bin/bash

ภายในคอนเทนเนอร์จะนำคุณไปยัง WORKDIR ที่กำหนดไว้ใน Dockerfile คุณสามารถเปลี่ยนไดเรกทอรีงานได้

WORKDIR directory_path # E.g  /usr/src -> container's path

0

เพื่อ exec เป็นภาชนะที่ใช้ชื่อ testด้านล่างเป็นคำสั่งต่อไปนี้

ถ้าภาชนะมีbashเปลือก

docker exec -it test /bin/bash

หากคอนเทนเนอร์มีbourneเชลล์และส่วนใหญ่ก็เป็นปัจจุบัน

docker run -it test /bin/sh

-3

สำหรับนักเทียบท่าเขียน (Docker4Drupal)

docker-compose exec php bash

ฉันใช้Docker สำหรับ Drupalบนแล็ปท็อป Linux หลังจากเรียกใช้คอนเทนเนอร์ฉันใช้ ' docker-compose exec php bash' เพื่อเชื่อมต่อกับคอนเทนเนอร์เพื่อให้ฉันสามารถเรียกใช้ command command drush มันใช้งานได้ดีสำหรับฉัน

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