use*_*131 5 docker dockerfile docker-compose
我的目的是在调用该容器的 docker-compose 时能够将一些参数传递给 docker 容器。
就像是
docker-compose up -d myContainer myArg1=hallo myArg2=world
Run Code Online (Sandbox Code Playgroud)
我的 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]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml 文件如下所示:
version: '3.4'
services:
myContainer:
image: ${DOCKER_REGISTRY-}myContainerImage
build:
context: ../..
dockerfile: MyProj/Dockerfile
Run Code Online (Sandbox Code Playgroud)
首先我想知道这是否可行,其次我想知道如何做到
Dav*_*aze 13
Docker 最终运行的命令行有两个“部分”:入口点和命令。有相应的 Docker Composeentrypoint:和command:指令来设置它们。它们的交互相当简单:它们只是连接在一起以生成单个命令行。
鉴于您所展示的内容,您可以在 Dockerfile 中编写
ENTRYPOINT ["dotnet", "myproj.dll"]
Run Code Online (Sandbox Code Playgroud)
然后在你的docker-compose.yml
command: myArg1=hallo myArg2=world
Run Code Online (Sandbox Code Playgroud)
这将最终启动带有这些论点的进程。
如果您希望在启动 Compose 堆栈时能够从命令行指定这一点,Compose 支持${VARIABLE}到处引用,因此您可以编写类似的内容
command: myArg1=${MY_ARG1:-hallo} world
Run Code Online (Sandbox Code Playgroud)
然后使用如下命令启动它
MY_ARG1=greetings docker-compose up
Run Code Online (Sandbox Code Playgroud)
Docker 中一个非常典型的模式是使用ENTRYPOINT包装器脚本进行一些首次设置,然后使用exec "$@". 入口点将命令行参数作为参数,并且可以对它们执行任何操作,包括重新格式化它们或完全忽略它们,您还可以使用它来实现 @Kevin 的答案,即主要使用环境变量进行配置,但将其翻译回来键入var=value选项。
小智 1
我认为你需要使用环境变量,你可以用它启动你的命令。
像这样的事情:(有多种方法可以做到这一点)
在撰写中: https: //docs.docker.com/compose/environment-variables/
environment:
- myVar
Run Code Online (Sandbox Code Playgroud)
在 dockerfile 中: https://docs.docker.com/engine/reference/builder/#env
ENTRYPOINT ["dotnet", "myproj.dll", "$myVar"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18044 次 |
| 最近记录: |