Docker 运行具有不同参数的多个图像实例

Kir*_*ran 4 docker dockerfile docker-compose asp.net-core-2.0

我是 docker 新手,所以这可能听起来有点基本问题。

我有一个 VS.Net core2 控制台应用程序,它能够接受一些命令行参数并提供不同的服务。所以在正常的命令提示符中我可以运行类似的东西

c:>dotnet myapplication.dll 5000 .\mydb1.db c:>dotnet myapplication.dll 5001 .\mydb2.db

这会在端口5000&上创建此应用程序的 2 个实例5001

我现在想为此应用程序创建一个 docker 容器,并希望运行该映像的多个实例,并能够将此参数作为命令行传递给docker run命令。但是我无法看到如何在docker-compose.ymlDockerfile

文件

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

# ignoring some of the code here
ENTRYPOINT ["dotnet", "myapplication.dll"]
Run Code Online (Sandbox Code Playgroud)

docker-Compose.yml

version: '3.4'
services:
  my.app:
    image: ${DOCKER_REGISTRY}my/app
    ports:
     - 5000:80
    build:
      context: .
      dockerfile: dir/Dockerfile
Run Code Online (Sandbox Code Playgroud)

我试图避免为每个命令行参数组合创建多个图像。那么有可能实现我正在寻找的东西吗?

Dav*_*aze 5

Docker 容器以一个入口点和一个命令启动;当容器实际启动时,它们只是简单地连接在一起。如果 中的 ENTRYPOINT 的Dockerfile结构类似于单个命令,则Dockerfilecommand:中的CMDdocker-compose.yml包含它的参数。

这意味着您应该能够将您的设置docker-compose.yml为:

services:
  my.app1:
    image: ${DOCKER_REGISTRY}my/app
    ports:
     - 5000:80
    command: [80, db1.db]
  my.app2:
    image: ${DOCKER_REGISTRY}my/app
    ports:
     - 5001:80
    command: [80, db2.db]
Run Code Online (Sandbox Code Playgroud)

(附带说明:如果程序的选项之一是要侦听的端口,则这需要与ports:规范中的第二个端口相匹配,在我的示例中,我选择让两者都侦听“正常”HTTP端口并使用ports:设置将其重新映射到主机上。如果需要,一个容器可以访问另一个容器,就像http://my.app2/在默认 HTTP 端口上一样。)