我使用这个映像:dperson/samba
图像正在定义它自己的入口点,我不想覆盖它。
我需要传递参数到入口点,简单的只有docker:
docker run ... dperson/samba arg1 arg2 arg3
但是如何使用docker_compose。yml吗?
现在我用的方法是:
command: samba.sh arg1 arg2 arg3
但是,当我强制重新定义入口点时,这并不令人满意。
我使用这个映像:dperson/samba
图像正在定义它自己的入口点,我不想覆盖它。
我需要传递参数到入口点,简单的只有docker:
docker run ... dperson/samba arg1 arg2 arg3
但是如何使用docker_compose。yml吗?
现在我用的方法是:
command: samba.sh arg1 arg2 arg3
但是,当我强制重新定义入口点时,这并不令人满意。
当前回答
你可以使用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
其他回答
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
要覆盖默认入口点,请使用入口点选项。要传递参数,使用命令。
下面是用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