调用docker-compose时将参数传递给docker容器

时间:2019-12-13 08:08:59

标签: docker docker-compose dockerfile

我的意图是能够在为该容器调用docker-compose时将某些参数传递给该容器。

类似

docker-compose up -d myContainer myArg1=hallo myArg2=world

我的Docker文件如下所示:

FROM mcr.microsoft.com/dotnet/core/runtime:2.2 AS final
WORKDIR /app
COPY Myproj/bin/Debug/netcoreapp2.1 .
ENTRYPOINT ["dotnet", "myproj.dll", myArg1, myArg2]

docker-compose.yml文件如下所示:

version: '3.4'

services:

   myContainer:
      image: ${DOCKER_REGISTRY-}myContainerImage
      build:
         context: ../..
         dockerfile: MyProj/Dockerfile

首先我想知道这是否可行,其次如何做

2 个答案:

答案 0 :(得分:0)

我认为您需要使用环境变量,您可以使用它启动命令。

类似这样的东西:(有几种方法可以做到这一点)

撰写: https://docs.docker.com/compose/environment-variables/

environment:
- myVar

在dockerfile中: https://docs.docker.com/engine/reference/builder/#env

ENTRYPOINT ["dotnet", "myproj.dll", "$myVar"]

答案 1 :(得分:0)

Docker最终运行的命令行有两个“一半”,entrypointcommand。有相应的Docker Compose entrypoint:command:指令来设置它们。它们的interaction非常简单:将它们串联在一起以生成单个命令行。

鉴于显示的内容,您可以在Dockerfile中编写

ENTRYPOINT ["dotnet", "myproj.dll"]

,然后在您的docker-compose.yml

command: myArg1=hallo myArg2=world

最终将使用这些参数启动该过程。

如果您希望能够在向上滚动Compose堆栈时从命令行指定此内容,请Compose supports ${VARIABLE} references everywhere,以便可以编写类似

的内容
command: myArg1=${MY_ARG1:-hallo} world

然后使用类似命令

启动它
MY_ARG1=greetings docker-compose up

Docker中的一个非常典型的模式是使用ENTRYPOINT作为包装脚本,该脚本执行一些首次设置,然后使用exec "$@"作为主要容器进程运行命令。入口点将命令行参数作为参数,并且可以对它们进行任何操作,包括重新格式化它们或完全忽略它们,并且您还可以使用它来实现@Kevin的answer,主要是使用环境变量进行配置,但可以将其翻译回var=value类型的选项。