我从Visual Studio 2019创建了以下简单的dotnet核心控制台应用程序。
Console.WriteLine("Hello World!");
var readText = Console.ReadLine();
Console.WriteLine(readText);
然后,我向该控制台项目添加docker支持。我在另一个问题中写了逐步说明,以添加Docker支持。
在命令提示符下,我现在导航到docker-compose文件所在的文件夹,并发出以下命令
docker-compose run <service name from docker-compose.yml file>
专门针对我的情况
docker-compose run dokconsoleapp
其中dokconsoleapp是在docker -compose文件中定义的服务名称。
这将构建映像,然后启动我的控制台应用程序,并在容器内部以交互方式运行。
当应用程序退出时,容器停止。现在,当我想再次运行时,我再次发出相同的命令。该应用程序按预期运行。但奇怪的是,该应用程序是在新容器中启动的,而不是重用现有的已停止容器。
所以我运行了3次命令,每次创建一个新容器时,请参见docker桌面。
现在我的问题是,我只是很好奇,这里是否可以通过docker-compose run来重用现有容器,而不是创建新容器。
注意命令
docker-compose up
由于创建的容器不是交互式的,因此无法使用。所以我只需要使用“运行”。更多细节在这里。
使用docker-compose run $SERVICENAME
将始终创建一个新容器,如文档中所述。
参考:-https: //docs.docker.com/compose/reference/run/
与run一起使用的命令在新容器中启动,该容器具有服务定义的配置,包括卷,链接和其他详细信息。但是,有两个重要区别。
我检查了您的其他文章,因为您正在尝试使用特定服务获得交互式外壳,所以可以通过以下方式实现。看一下这个例子docker-compose.yml
。
version: '3'
services:
test:
container_name: test
image: 'busybox'
command: sleep 5d
跑 docker-compose up -d
-d
=>以分离模式运行
command: sleep 5d
根据要运行5 days
的容器,然后执行以下命令,然后使用以下命令执行到容器中
$ docker exec -it test /bin/sh
这样您就不会每次都得到新的容器。
还要看一下这篇文章:-https : //docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句