วิธีการส่งผ่านอาร์กิวเมนต์ไปยังจุดเข้าใช้งานใน docker-compose.yml


159

ฉันใช้รูปนี้: dperson / samba

รูปภาพกำหนดจุดเข้าใช้งานของตัวเองและฉันไม่ต้องการแทนที่มัน

ฉันต้องผ่านการขัดแย้งไปยังจุดเข้าใช้งานง่ายด้วยนักเทียบท่าเท่านั้น:

docker run ... dperson/samba arg1 arg2 arg3

แต่จะทำอย่างไรกับ docker_compose.yml

ตอนนี้ฉันใช้เป็นวิธีแก้ปัญหา:

command: samba.sh arg1 arg2 arg3

แต่ก็ไม่เป็นที่น่าพอใจเมื่อฉันบังคับให้นิยามใหม่ของจุดเข้าใช้งาน

คำตอบ:


128

ส่วนcommandคำสั่งใช้งานได้ตามที่ @Karthik กล่าวไว้

เป็นตัวอย่างง่ายๆบริการต่อไปนี้จะมีการ-inMemoryเพิ่มลงในENTRYPOINTเมื่อdocker-compose upมีการเรียกใช้

version: '2'
services:
  local-dynamo:
    build: local-dynamo
    image: spud/dynamo
    command: -inMemory

52

อะไรก็ตามที่ระบุไว้ในcommandin docker-compose.yml ควรต่อท้ายกับที่entrypointกำหนดใน Dockerfile โดยระบุentrypointไว้ในรูปแบบ exec ใน Dockerfile

ถ้า EntryPoint ถูกกำหนดในรูปแบบเชลล์อาร์กิวเมนต์ CMD ใด ๆ จะถูกละเว้น


20
ตัวอย่างบางส่วน "รูปแบบ exec" คืออะไร?
Aaron McMillin

13
ENTRYPOINT ["executable", "param1", "param2"](แบบฟอร์ม exec, เป็นที่ต้องการ) ENTRYPOINT command param1 param2(รูปแบบเชลล์) การอ้างอิง: การอ้างอิง
Dockerfile

16
ตัวอย่างจะช่วยให้คำตอบนี้มาก
Dagrooms

32

คุณสามารถใช้docker-compose runแทนdocker-compose upและตะปูหัวโตโต้แย้งในตอนท้าย ตัวอย่างเช่น:

docker-compose run dperson/samba arg1 arg2 arg3

หากคุณต้องการเชื่อมต่อกับคอนเทนเนอร์นักเทียบท่าอื่น ๆ ใช้สามารถใช้--service-portsตัวเลือก:

docker-compose run --service-ports dperson/samba arg1 arg2 arg3

1
เศร้าในฝูงนี้ไม่ได้เป็นตัวเลือก
Holms

15

เพื่อแทนที่จุดเข้าใช้งานเริ่มต้นใช้ตัวเลือกentrypoint commandที่จะผ่านการใช้งานข้อโต้แย้ง

นี่คือตัวอย่างของการแทนที่bashด้วยshในubuntuภาพ:

version: '3'
services:
  sh:
    entrypoint: /bin/sh
    command: -c "ps $$(echo $$$$)"
    image: ubuntu
    tty: true
  bash:
    entrypoint: /bin/bash
    command: -c "ps $$(echo $$$$)"
    image: ubuntu
    tty: true

นี่คือผลลัพธ์:

$ docker-compose up   
Starting test_sh_1                ... done
Starting 020211508a29_test_bash_1 ... done
Attaching to test_sh_1, 020211508a29_test_bash_1
sh_1    |   PID TTY      STAT   TIME COMMAND
sh_1    |     1 pts/0    Ss+    0:00 /bin/sh -c ps $(echo $$)
020211508a29_test_bash_1 |   PID TTY      STAT   TIME COMMAND
020211508a29_test_bash_1 |     1 pts/0    Rs+    0:00 ps 1

13

ฉันกำลังเผชิญปัญหาเดียวกันกับเจนกินส์ ssh ทาส ' jenkinsci / ssh-slave ' อย่างไรก็ตามกรณีของฉันค่อนข้างซับซ้อนเนื่องจากจำเป็นต้องผ่านการโต้แย้งที่มีช่องว่าง ฉันจัดการเพื่อทำมันเหมือนด้านล่าง (จุดเข้าใช้งานใน dockerfile อยู่ในรูปแบบ exec):

command: ["some argument with space which should be treated as one"]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.