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추가됩니다 .ENTRYPOINTdocker-compose up

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

52

commanddocker-compose.yml에 지정된 내용 entrypoint은 Dockerfile entrypoint에 exec 형식으로 정의되어 있으면 Dockerfile에 정의 된 항목에 추가되어야합니다 .

EntryPoint가 셸 형식으로 정의 된 경우 모든 CMD 인수는 무시됩니다.


20
몇 가지 예는 어떻습니까. "exec form"는 무엇입니까?
Aaron McMillin

13
ENTRYPOINT ["executable", "param1", "param2"](exec 형식, 선호) ENTRYPOINT command param1 param2(shell 형식) 참조 : Dockerfile 참조
jonasbn

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

기본 진입 점을 무시하려면 entrypointoption을 사용하십시오 . 인수를 전달하려면을 사용하십시오 command.

여기서 치환의 예이다 bash으로 shubuntu이미지 :

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

jenkins ssh slave ' 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.