我使用这个映像:dperson/samba
图像正在定义它自己的入口点,我不想覆盖它。
我需要传递参数到入口点,简单的只有docker:
docker run ... dperson/samba arg1 arg2 arg3
但是如何使用docker_compose。yml吗?
现在我用的方法是:
command: samba.sh arg1 arg2 arg3
但是,当我强制重新定义入口点时,这并不令人满意。
docker-compose中command中指定的值。yml应该被追加到Dockerfile中定义的entrypoint,前提是entrypoint在Dockerfile中的exec形式中定义:
command
entrypoint
ENTRYPOINT ["executable", "param1", "param2"]
如果EntryPoint以shell形式定义(例如,ENTRYPOINT executable param1 param2),则任何CMD参数将被忽略。
ENTRYPOINT executable param1 param2
你可以使用docker-compose run代替docker-compose up,并将参数附加在后面。例如:
docker-compose run
docker-compose up
docker-compose run dperson/samba arg1 arg2 arg3
如果你需要连接到其他docker容器,可以使用--service-ports选项:
--service-ports
docker-compose run --service-ports dperson/samba arg1 arg2 arg3
command子句在正如@Karthik所说中起作用。
作为一个简单的例子,当docker-compose up运行时,下面的服务将有一个-inMemory添加到它的ENTRYPOINT中。
-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的例子:
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