簡體   English   中英

當 docker-compose 運行命令被觸發時,是否可以重用已停止的容器?

[英]Is it possible to reuse an existing stopped container when docker-compose run command is fired?

我從 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 文件中定義的服務名稱。

這將構建映像,並且我的控制台應用程序將在容器內以交互方式啟動和運行。

當應用程序退出時,容器停止。 現在,當我想再次運行時,我再次發出相同的命令。 該應用程序按預期運行。 但奇怪的是,該應用程序是在一個新容器中啟動的,而不是重用現有的停止容器。

重復 Docker-Compose 運行創建新容器

所以我運行該命令三次,每次創建一個新容器時,請參見 docker 桌面。

Docker-Compose 運行啟動多個容器,如 Docker Desktop 中所示

現在我的問題是,我只是好奇,這里有沒有辦法運行 docker-compose 來重用現有容器,而不是創建新容器。

注意命令

docker-compose up 

不起作用,因為它創建的容器不是交互式的。 所以我只能使用“運行”。 更多細節在這里

使用docker-compose run $SERVICENAME將始終創建一個新容器,如文檔中所述。

參考:- https://docs.docker.com/compose/reference/run/

與運行一起使用的命令在具有由服務定義的配置的新容器中啟動,包括卷、鏈接和其他詳細信息。 但是,有兩個重要的區別。

我查看了您的另一篇文章,因為您正在嘗試獲得具有特定服務的交互式 shell,您可以通過以下方式實現。 查看示例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 ,然后運行 5 天,然后使用以下命令執行到容器中

$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM