นักเทียบท่าวิ่งไม่ต่อท้ายอาร์กิวเมนต์กับจุดเข้ารูปภาพ


13

ฉันมี Dockerfile ด้วย:

ENTRYPOINT ["uwsgi", "--ini /home/docker/app/uwsgi_app.ini"]

(ไม่CMD)

เมื่อฉันเรียกใช้ uwsgi ที่ถูกต้องบ่น:

uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***

ตอนนี้ฉันคิดว่าฉันสามารถต่อท้ายอาร์กิวเมนต์กับจุดเข้าใช้งานผ่านdocker runดังนี้:

$ docker run -itP uwsgi_app:0.1 --uid=docker

อย่างไรก็ตาม uwsgi ยังคงบ่นกับข้อผิดพลาดเดียวกันดูเหมือนว่า arg ไม่ได้ถูกต่อท้าย

ถ้าฉันแทนที่จุดเข้าใช้แล้ว arg จะได้รับการเพิ่ม:

$ docker run -itP --entrypoint bash uwsgi_app:0.1 --uid=docker
bash: --uid=docker: invalid option

... ฉันสงสัยว่ามันเป็น--iniตัวเลือกของ uwsgi โดยไม่สนใจ args อื่น ๆ แต่ไม่ใช่ว่า:

$ docker run -itP --entrypoint bash uwsgi_app:0.1
[ root@88941de25b1f:/home/docker ]$ uwsgi --ini /home/docker/app/uwsgi_app.ini --uid=docker
user docker not found.

(โอเคข้อผิดพลาด แต่แสดงให้เห็นถึงการยอมรับ ARG)

คำตอบ:


26

ปรากฎว่าคำตอบคือการใช้รูปแบบอาร์เรย์ของENTRYPOINT(และ / หรือCMD) เพื่อให้ผนวกจากบรรทัดคำสั่งในการทำงาน

ด้วย:

ENTRYPOINT ["uwsgi", "--ini", "/home/docker/app/uwsgi_app.ini"]

แล้ว:

$ docker run -itP uwsgi_app:0.2 --uid=docker
...
user docker not found.

(โอเคข้อผิดพลาด แต่แสดงให้เห็นถึงการยอมรับ ARG)

พฤติกรรมนี้ได้อธิบายไว้ในเอกสารจริง:
https://docs.docker.com/reference/builder/#entrypoint

... ฉันพลาดไปเมื่ออ่านสกิมอ่าน :)


ฉันจะเปลี่ยนอาเรย์อาร์กิวเมนท์ในบรรทัดคำสั่งเป็นนักเทียบท่าวิ่ง - ผู้ชี้ขาด ... ภาพได้อย่างไร
eel ghEEz

ฉันไม่คิดว่าจะมีรูปแบบอาร์เรย์สำหรับคำสั่งเรียกใช้docs.docker.com/engine/reference/run/…บางทีคุณต้องพูดเช่นdocker run --entrypoint "uwsgi --ini /home/docker/app/uwsgi_app.ini" <image>
Anentropic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.