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

sfa*_*oso 2 docker

我是 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
Run Code Online (Sandbox Code Playgroud)

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

sudo systemctl start app@argument1.service
sudo systemctl start app@argument2.service
sudo systemctl start app@argument3.service
Run Code Online (Sandbox Code Playgroud)

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

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

β.ε*_*.βε 6

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

Docker 文档中的表格可能是理解它的更方便的方式,并且比冗长的描述要好得多。

但简而言之,当您使用“参数”形式时,CMD您可以对ENTRYPOINT容器以及它将要运行的可执行文件进行操作。

这是您可以对现有应用程序执行的操作的真正简化形式,只需删除此虚拟示例echoENTRYPOINT的 应该已经可以引导您实现所需的行为:

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"] 
Run Code Online (Sandbox Code Playgroud)
  1. 不带参数运行它:
    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"] 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用第二个服务作为参数运行它:
    docker run 31f3db535473 
    /usr/bin/dotnet /opt/swp/app.dll app@argument1.service
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用第三个服务作为参数运行它:
    docker run 31f3db535473 app@argument2.service
    /usr/bin/dotnet /opt/swp/app.dll app@argument2.service
    
    Run Code Online (Sandbox Code Playgroud)


DCC*_*der 5

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

运行

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

docker run -e DEBUG=1 web python console.py
Run Code Online (Sandbox Code Playgroud)

环境文件

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

$ cat ./Docker/api/api.env
NODE_ENV=test
Run Code Online (Sandbox Code Playgroud)

Docker 撰写

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

docker-compose run -e DEBUG=1 web python console.py
Run Code Online (Sandbox Code Playgroud)

您还可以查看此问题以获取更多示例。

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


归档时间:

查看次数:

448 次

最近记录:

5 年,1 月 前