代码之家  ›  专栏  ›  技术社区  ›  Kiran

Docker使用不同的参数运行图像的多个实例

  •  0
  • Kiran  · 技术社区  · 6 年前

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

    我有一个VS.NETCore2控制台应用程序,它能够接受一些命令行参数并提供不同的服务。所以在一个普通的命令提示符下,我可以运行

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

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

    我现在要为这个应用程序创建一个docker容器,并希望运行该映像的多个实例,并且能够将这个参数作为命令行传递给 docker run docker-compose.yml 或者 Dockerfile

    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 回复  |  直到 6 年前
        1
  •  5
  •   Ryan Dawson    6 年前

    Docker容器由入口点和命令启动;当容器实际启动时,它们只是连接在一起。如果 Dockerfile 结构类似于单个命令 Dockerfile文件 command: docker-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]
    

    (作为旁注:如果程序的选项之一是要侦听的端口,则需要与 ports: 端口: 设置。如果需要的话,一个容器可以够到另一个容器 http://my.app2/ 在默认HTTP端口上。)