【问题标题】:Is it possible run a docker container multiple times with different arguments?是否可以使用不同的参数多次运行 docker 容器?
【发布时间】:2021-01-10 02:15:58
【问题描述】:

我是 Docker 新手,我想弄清楚是否可以使用不同的参数多次运行应用程序。

我使用 .Net 开发了我的应用程序,到目前为止,我已经使用 Ubuntu 服务执行了所有实例,例如:

[Unit]
Description=swp %I

[Service]
Environment=ENV=PRODUCTION
Type=simple
User=foo
ExecStart=/usr/bin/dotnet /opt/swp/app.dll %i
WorkingDirectory=/opt/app
Restart=always
RestartSec=5

%I 是我在启动服务时传递的参数,例如:

sudo systemctl start app@argument1.service
sudo systemctl start app@argument2.service
sudo systemctl start app@argument3.service

因此,根据提供的参数,我有三个以不同逻辑运行的应用程序实例。

如何使用 Docker 复制相同的内容?

【问题讨论】:

标签: docker


【解决方案1】:

使用 docker 完全可以做到这一点。您必须采取的第一步是将应用程序从使用命令行参数修改为接受环境变量。在此之后 docker provides an easy method of using environment variables.

Docker 运行

例如,您可以使用“环境”键在服务的容器中设置环境变量,就像使用 docker run -e VARIABLE=VALUE 一样

docker run -e DEBUG=1 web python console.py

ENV_FILE

或者您可以使用 env 文件。下面的示例显示了一个 env_file 将 NODE_ENV 环境变量设置为 'test'

$ cat ./Docker/api/api.env
NODE_ENV=test

Docker 编写

就像使用 docker run -e 一样,您可以使用 docker-compose run -e 在一次性容器上设置环境变量

docker-compose run -e DEBUG=1 web python console.py

您也可以查看this question 了解更多示例。

如果修改程序以接受环境变量不可能或太不方便,您可以轻松地使用ARG in your dockerfile 来修改您的CMD 在启动时的运行方式。

【讨论】:

    【解决方案2】:

    在 Docker 上执行此操作的方法是使用 CMDENTRYPOINT 对。

    The table in the Docker documentation 可能是更方便理解它的方式,而且比长篇描述要好得多。

    但简而言之,当您使用 "parameters" form of CMD 时,您可以对容器的 ENTRYPOINT 以及它将运行的可执行文件进行操作。

    这是您可以对现有应用程序执行的操作的一种非常简化的形式,只需删除此虚拟示例的 ENTRYPOINT 中的 echo 即可让您获得所需的行为:

    FROM ubuntu
    
    ENTRYPOINT ["echo", "/usr/bin/dotnet", "/opt/swp/app.dll"]
    ## This would be the default service, 
    ## if we run the container without any parameter
    CMD ["app@argument1.service"] 
    
    1. 不带参数运行它:
      docker run 31f3db535473 
      /usr/bin/dotnet /opt/swp/app.dll app@argument1.service
      
    2. 以第二个服务作为参数运行它:
      docker run 31f3db535473 app@argument2.service
      /usr/bin/dotnet /opt/swp/app.dll app@argument2.service
      
    3. 以第三个服务作为参数运行它:
      docker run 31f3db535473 app@argument3.service
      /usr/bin/dotnet /opt/swp/app.dll app@argument3.service
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2016-02-21
      • 2015-10-26
      • 2018-10-15
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多