Docker RUN具有不同参数的映像的多个实例

时间:2018-10-15 10:52:33

标签: docker docker-compose dockerfile asp.net-core-2.0

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

我有一个VS.Net core2控制台应用程序,该应用程序可以采用一些命令行参数并提供不同的服务。因此,在正常的命令提示符下,我可以运行

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

会在端口50005001上创建此应用程序列表的2个实例。

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

中进行配置

DockerFile

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

# ignoring some of the code here
ENTRYPOINT ["dotnet", "myapplication.dll"]

docker-Compose.yml

version: '3.4'
services:
  my.app:
    image: ${DOCKER_REGISTRY}my/app
    ports:
     - 5000:80
    build:
      context: .
      dockerfile: dir/Dockerfile

我试图避免在每个命令行参数组合中创建多个图像。这样有可能实现我的期望吗?

1 个答案:

答案 0 :(得分:2)

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

这意味着您应该可以将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]

(请注意:如果程序的选项之一是侦听的端口,则需要与ports:规范中的第二个端口匹配,在我的示例中,我选择了具有两者都侦听“正常” HTTP端口,然后使用ports:设置在主机上重新映射。如果需要,一个容器可以到达默认HTTP端口上的http://my.app2/,到达另一个容器。)< / p>