当前位置: 首页 > 知识库问答 >
问题:

是否可以使用不同的参数多次运行docker容器?

翁文康
2023-03-14

我是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

共有1个答案

王云
2023-03-14

使用Docker完全可以做到这一点。您将必须采取的第一步是修改您的应用程序,从使用命令行参数到接受环境变量。之后,docker提供了一种使用环境变量的简单方法。

Docker运行

例如,您可以使用'environment'键设置服务容器中的环境变量,就像使用docker run-e variable=value一样

docker run -e DEBUG=1 web python console.py
$ cat ./Docker/api/api.env
NODE_ENV=test

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

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

你也可以查看这个问题以获得更多的例子。

如果不可能或太不方便修改程序以接受环境变量,您可以很容易地在dockerfile中使用一个ARG来修改CMD在启动时的运行方式。

 类似资料:
  • 问题内容: 假设我通过创建共享对象并使用LD_PRELOAD首先加载它来替换函数。是否有可能使该功能的参数不同于原始库中的参数? 例如,如果我替换 pthread_mutex_lock ,这样它将代替参数 pthread_mutex_t 而是使用 pthread_my_mutex_t 。可能吗? 其次,除了函数之外,是否可以使用LD_PRELOAD更改结构声明?例如,可以向结构中增加一个字段。 问

  • 假设我们有一个函数和另一个函数 我们希望编写一个Unit测试,检查是否调用了的次数和正确的参数。 那里有 但这只是指最后一次通话。所以假设调用,然后,调用的断言是。 此外,还有 这将生成一个包含正确参数的对象列表。将这个列表与我们在单元测试中创建的对象进行比较,感觉是一件非常讨厌的事情<代码>调用似乎是模拟库的一个内部类。 有更好的方法吗?我使用这个设置来测试函数的并行执行。

  • 争论严格适用于每个国家。 我不想为所有国家复制粘贴这个场景,我想知道我是否可以有功能/支持文件,这样我就可以取代“巴西”参数,以获得更动态的东西。 也许所有测试都像cucumber一样运行--参数“巴西”

  • 问题内容: JVM是否可以同时运行多个程序?如果是这样,怎么办?如果没有,为什么? 要运行程序,我们只需 但是我们可以使用同一个JVM实例来运行另一个程序吗? 问题答案: 答案取决于您对“程序”的定义。具有方法并以其开头的Java程序通常无法在同一JVM中运行,因为没有内置的资源或名称空间分隔。例如,如果两个程序使用同一库的冲突版本怎么办? 我们还提供了旨在共享JVM的应用程序,例如企业应用程序。

  • 每个命令或Dockerfile中的每个命令都创建一个容器。如果容器不再运行,仍然可以使用看到它。 我是否应该关注一个庞大的未运行容器列表?是否应该在未运行的容器上发布? 我不确定这些未运行的容器会导致什么性能或内存/存储损失。

  • 当我多次调用同一个函数时,每次都传递了不同的参数,我会这样做: 有没有更方便的方法做到这一点呢?