2015-04-19 14 views
9

我正在尝试使用docker-compose up您可以使用docker run [APP_CONTAINER_NAME] [APP_OPTIONS]的方式。如何将命令行选项发送到我以“docker-compose up”开头的dockerized程序?

+0

我真的不明白在Dockerfile命令将按照默认的参数传递给入口点发送到入口点问题 - 在docker-compose中,将参数放入docker-compose.yml文件中。这种方法对你有没有问题? –

+0

@AdrianMouat是的,它不是理想的,因为每次你想发送一个新的选项,你必须修改docker-compose.yml,重建并重新运行。我希望能够在运行服务时将选项发送到我的程序,因为我可以在运行带有docker run的主容器时执行该服务,并在我的Dockerfile中使用ENTRYPOINT来实现此行为。 – Donovan

回答

2

docker run被定义为:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 

虽然docker compose run被定义为:

docker-compose run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] 

在这两种情况下,最终ARGS(这可能是的 “APP_OPTIONS” 任择议定书的问题)会被传递给容器命令。

请注意,docker run选项中的一些可以按原样用于docker-compose run(其中一个为-d,用于运行分离的容器命令),但不是全部。

+2

没有办法将ARGS放入docker-compose文件中吗?在我的情况下,在命令行上传递它们太不稳定。 – dsteinkopf

+1

@dsteinkopf当然:使用'command'(https://docs.docker.com/compose/compose-file/#command),你可以覆盖图像默认命令,允许你重复图像中定义的命令,但改变其参数。 – VonC

3

Docker Compose的要点是您不必记住所有的命令行开关。

如果你想改变不同上下文的环境变量,我建议你为Compose创建一个基地common.yml文件。然后,您可以为每个不同的上下文创建一个新的yml文件,并使用extends指令继承common.yml文件。然后,您可以使用-f标志到docker compose在上下文之间切换。

另请注意,如果您只是在yml中更改一个变量,并且您可以使用外部文件作为环境变量(如果这对您更好),则Compose不应“重建”任何内容。

相关问题