我用这个图片:dperson / samba
图像定义了它自己的入口点,我不想覆盖它。
我需要将参数传递给入口点,只需使用docker即可:
docker run ... dperson/samba arg1 arg2 arg3
但是如何使用docker_compose.yml?
现在我用作解决方法:
command: samba.sh arg1 arg2 arg3
但是当我强制重新定义入口点时,它并不令人满意。
答案 0 :(得分:86)
command
条款确实有效,正如@Karthik所说。
举一个简单的例子,当-inMemory
运行时,以下服务会在ENTRYPOINT
添加docker-compose up
。
version: '2'
services:
local-dynamo:
build: local-dynamo
image: spud/dynamo
command: -inMemory
答案 1 :(得分:35)
在docker-compose.yml中的(function ()
{
'use strict';
angular
.module('app.pages.auth.verify-mobile')
.controller('VerifyMobileController', VerifyMobileController);
/** @ngInject */
function VerifyMobileController(dataservice)
{
var data = dataservice.getData();
alert(data);
}
})();
中指定的内容应该附加到Dockerfile中定义的command
,前提是在Dockerfile中以exec格式定义了entrypoint
。 / p>
如果以shell形式定义EntryPoint,则将忽略任何CMD参数。
答案 2 :(得分:18)
您可以使用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
答案 3 :(得分:7)
我遇到了与jenkins ssh slave'jenkinsci/ssh-slave'相同的问题,但是我的情况有点复杂,因为必须传递一个包含空格的参数。我已经设法像下面这样做了(dockerfile中的入口点是以exec形式):
command: ["some argument with space which should be treated as one"]
希望这会有所帮助。 感谢。
答案 4 :(得分:2)
要覆盖默认入口点,请使用entrypoint
option。要传递参数,请使用command
。
以下是在bash
图片中将sh
替换为ubuntu
的示例:
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