Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用不同的参数多次运行docker容器?_Docker - Fatal编程技术网

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

是否可以使用不同的参数多次运行docker容器?,docker,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

我是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
sudo systemctl start app@argument1.service
sudo systemctl start app@argument2.service
sudo systemctl start app@argument3.service
其中
%I
是启动服务时传递的参数,如:

[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
sudo systemctl start app@argument1.service
sudo systemctl start app@argument2.service
sudo systemctl start app@argument3.service
因此,根据提供的参数,我有三个应用程序实例,它们以不同的逻辑运行


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

使用Docker完全可以做到这一点。您必须采取的第一步是将应用程序从使用命令行参数修改为接受环境变量。在这个码头工人之后

Docker Run

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

docker run -e DEBUG=1 web python console.py
环境文件

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

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

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

docker-compose run -e DEBUG=1 web python console.py
您还可以查看更多示例


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

在Docker上执行此操作的方法是使用
CMD
入口点
耦合

这可能是理解它更方便的方式,而且比一个长描述要好得多

但简而言之,当您使用时,您可以对容器的
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"] 
  • 无参数运行它:
    docker运行31f3db535473
    /usr/bin/dotnet/opt/swp/app.dllapp@argument1.service
    
  • 以第二个服务作为参数运行它:
    docker运行31f3db535473app@argument2.service
    /usr/bin/dotnet/opt/swp/app.dllapp@argument2.service
    
  • 以第三个服务作为参数运行它:
    docker运行31f3db535473app@argument3.service
    /usr/bin/dotnet/opt/swp/app.dllapp@argument3.service
    
  • 请看下面的图片。服务文件中的大多数选项映射到一些
    docker run
    选项。