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不会检测到您的文件中的更改,并自动重新加载它。
它与以下内容相同:
- 打开计算机上的terminal,然后键入
/bin/bash /scripts/count.sh
- 打开另一个terminal会话,然后编辑
count.sh
,然后保存它。
现在你不指望第一个窗口能自动接受这个变化吗? 容器中发生完全相同的过程。 要获得第一个窗口来反映count.sh
的更改,您需要重新启动它。
装入卷只是意味着文件更改在容器中是可见的,它不会影响使用这些文件的任何进程。
它在docker-compose例子中工作的原因是因为他们使用Flask作为示例应用程序。 如果在debugging模式下运行Flask,它会在检测到文件发生任何变化时自动重新加载(从我的重点) 烧瓶文档 :
烧瓶脚本非常适合启动本地开发服务器,但每次更改代码后都必须手动重新启动它。 这不是很好,烧瓶可以做得更好。 如果启用debugging支持,则服务器将自动重新加载代码更改 ,如果出现问题,它也将为您提供有用的debugging器。
自动重新加载是瓶子的特征,而不是docker的组成。