如何在docker-compose.yml中将参数传递给入口点


158

我使用此图像:dperson / samba

该图像定义了它自己的入口点,我不想覆盖它。

我需要将参数传递给入口点,仅适用于docker:

docker run ... dperson/samba arg1 arg2 arg3

但是如何使用docker_compose.yml呢?

现在,我用作解决方法:

command: samba.sh arg1 arg2 arg3

但是当我强制重新定义入口点时,它并不令人满意。

Answers:


127

command子句确实如上述@Karthik所述工作。

作为一个简单的示例,以下服务将在运行时-inMemory添加其服务。ENTRYPOINTdocker-compose up

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

52

command如果entrypoint在dockerfile中entrypoint以exec形式定义,则docker -compose.yml中指定的任何内容都应追加到Dockerfile 中的定义。

如果EntryPoint是以shell形式定义的,则任何CMD参数都将被忽略。


20
怎么样一些例子。什么是“执行表格”?
亚伦·麦克米林

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

如果需要连接到其他Docker容器,请使用可以使用--service-ports选项:

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

1
可悲的是,这不是一个选择
霍姆斯(Homs)

15

要覆盖默认入口点,请使用entrypointoption。要传递参数,请使用command

下面是替换的例子bashshubuntu图像:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.