我使用这个映像:dperson/samba

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

我需要传递参数到入口点,简单的只有docker:

docker run ... dperson/samba arg1 arg2 arg3

但是如何使用docker_compose。yml吗?

现在我用的方法是:

command: samba.sh arg1 arg2 arg3

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


docker-compose命令中指定的任何内容。如果入口点在Dockerfile中以exec形式定义,那么yml应该被追加到Dockerfile中定义的入口点:

入口点["可执行","param1", "param2"]

如果EntryPoint是以shell形式定义的(例如,EntryPoint可执行文件param1 param2),那么任何CMD参数都将被忽略。


你可以使用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

命令子句确实像@Karthik说的那样工作。

作为一个简单的例子,下面的服务在运行docker-compose up时将-inMemory添加到它的ENTRYPOINT中。

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

我也面临着同样的问题与詹金斯ssh奴隶'jenkinsci/ssh-slave'。然而,我的情况有点复杂,因为必须传递一个包含空格的参数。我已经做到了如下所示(dockerfile中的入口点是exec形式):

command: ["some argument with space which should be treated as one"]

要覆盖默认入口点,请使用入口点选项。要传递参数,使用命令。

下面是用sh替换bash的例子:

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

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

command:
  - arg1
  - arg2