3

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

就像是

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

首先我想知道这是否可行,其次是怎么做

4

2 回答 2

6

Docker 最终运行的命令行有两个“部分”,入口点命令。有相应的 Docker Composeentrypoint:command:指令来设置它们。它们的交互相当简单:它们只是连接在一起以产生一个命令行。

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

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

然后在你的docker-compose.yml

command: myArg1=hallo myArg2=world

这将最终以这些论点启动该过程。

如果您希望能够在启动 Compose 堆栈时从命令行中指定它,Compose 支持${VARIABLE}任何地方的引用,因此您可以编写类似

command: myArg1=${MY_ARG1:-hallo} world

然后使用类似的命令启动它

MY_ARG1=greetings docker-compose up

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

于 2019-12-13T11:57:22.850 回答
1

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

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

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

environment:
- myVar

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

ENTRYPOINT ["dotnet", "myproj.dll", "$myVar"]
于 2019-12-13T08:31:53.287 回答