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

use*_*414 118 docker-compose

我用这个图片:dperson/samba

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

我需要将参数传递给入口点,只需使用docker即可:

docker run ... dperson/samba arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

但是如何用docker_compose.yml做呢?

现在我用作解决方法:

command: samba.sh arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

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

小智 103

command条款确实有效,正如@Karthik上面所述.

举一个简单的例子,以下服务将在运行时-inMemory添加.ENTRYPOINTdocker-compose up

version: '2'
services:
  local-dynamo:
    build: local-dynamo
    image: spud/dynamo
    command: -inMemory
Run Code Online (Sandbox Code Playgroud)

  • 有这方面的文档吗?我似乎找不到任何对 docker-compose 服务上的命令子句的引用。 (2认同)

Kar*_*hik 43

无论在commanddocker-compose.yml中指定的是什么,都应该附加到entrypointDockerfile中定义的,前提entrypoint是在Dockerfile中以exec形式定义.

如果EntryPoint以shell形式定义,则将忽略任何CMD参数.

  • 一些例子怎么样?什么是"执行形式"? (17认同)
  • `ENTRYPOINT ["executable","param1","param2"]`(exec form,preferred)`ENTRYPOINT命令param1 param2`(shell form)参考:[Dockerfile reference](https://docs.docker.com/engine /参考/助洗剂/#入口点) (13认同)
  • 一个例子可以帮助这个答案. (11认同)

afa*_*dge 23

您可以在最后使用docker-compose run而不是docker-compose up并添加参数.例如:

docker-compose run dperson/samba arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

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

docker-compose run --service-ports dperson/samba arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

  • 可悲的是,在群体中这不是一个选择 (2认同)
  • 不幸的是,这会创建一个具有长名称(附加 ID)的容器,因此您无法使用“docker-compose logs <service>”,因为服务名称不同(毫无疑问还有其他差异。) (2认同)

小智 13

command你可以像这样在字段中传递参数

command:
  - arg1
  - arg2
Run Code Online (Sandbox Code Playgroud)


小智 9

我遇到了与jenkins ssh slave'jenkinsci/ssh-slave ' 相同的问题,但是我的情况有点复杂,因为有必要传递一个包含空格的参数.我设法像下面这样做(dockerfile中的入口点是exec形式):

command: ["some argument with space which should be treated as one"]
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.谢谢.


ken*_*orb 7

要覆盖默认入口点,请使用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
Run Code Online (Sandbox Code Playgroud)

这是输出:

$ 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
Run Code Online (Sandbox Code Playgroud)