docker – 撰写不select更新的代码

Iam新的docker-compose尝试在容器中运行示例脚本。 以下是我的Dockerfile。

#Dockerfile FROM debian ADD . /scripts CMD ["bash", "/scripts/count.sh"] #docker-compose.yml version: '2' services: count: build: . volumes: - .:/scripts 

在容器中运行的示例bash脚本

 #!/bin/bash count=0 #while [[ $count -le 30 ]]; while : do #(( count++ )) echo "hello world" done 

当我运行docker组成,它运行良好,我可以看到日志为“你好世界”。 因为我已经将主机上的卷导出到容器,如果我更改脚本取消注释该行

 while [[ $count -le 30 ]]; 

我看不到容器停在计数30,或者如果我改变“你好世界”任何文本它不select代码。 我已经将我的本地/ tmp /脚本挂载到/脚本到容器中我错过了什么?

我使用docker-compose中的例子,它工作,我得到更新的代码。 但它不适用于我的例子。 请指教

您需要重新启动进程; bash不会检测到您的文件中的更改,并自动重新加载它。

它与以下内容相同:

  1. 打开计算机上的terminal,然后键入/bin/bash /scripts/count.sh
  2. 打开另一个terminal会话,然后编辑count.sh ,然后保存它。

现在你不指望第一个窗口能自动接受这个变化吗? 容器中发生完全相同的过程。 要获得第一个窗口来反映count.sh的更改,您需要重新启动它。

装入卷只是意味着文件更改在容器中是可见的,它不会影响使用这些文件的任何进程。

它在docker-compose例子中工作的原因是因为他们使用Flask作为示例应用程序。 如果在debugging模式下运行Flask,它会在检测到文件发生任何变化时自动重新加载(从我的重点) 烧瓶文档 :

烧瓶脚本非常适合启动本地开发服务器,但每次更改代码后都必须手动重新启动它。 这不是很好,烧瓶可以做得更好。 如果启用debugging支持,则服务器将自动重新加载代码更改 ,如果出现问题,它也将为您提供有用的debugging器。

自动重新加载是瓶子的特征,而不是docker的组成。