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

我使用这个映像:dperson/samba

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

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

docker run ... dperson/samba arg1 arg2 arg3

但是如何使用docker_compose。yml吗?

现在我用的方法是:

command: samba.sh arg1 arg2 arg3

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

252227 次浏览

docker-compose中command中指定的值。yml应该被追加到Dockerfile中定义的entrypoint,前提是entrypoint在Dockerfile中的exec形式中定义:

ENTRYPOINT ["executable", "param1", "param2"]

如果EntryPoint以shell形式定义(例如,ENTRYPOINT executable 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

command子句在正如@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"]

要覆盖默认的入口点,使用entrypoint选项。要传递参数,使用command

下面是用ubuntu图像中的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字段中传递参数

command:
- arg1
- arg2