我刚接触到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-compose时,它运行良好,我可以看到日志为“hello world”。因为我已经将主机上的卷导出到容器,如果我更改脚本取消注释行
while [[ $count -le 30 ]];
我无法看到容器在第30位停止,或者如果我将“hello world”更改为任何文本,它不会选择代码。 我已将本地/ tmp / scripts安装到/ scripts到容器中 我错过了什么吗?
我使用docker-compose中的示例,它工作正常,我得到了更新的代码。 但它不适用于我的例子。 请指教
答案 0 :(得分:0)
您需要重启该过程; bash不会检测文件中的更改并自动重新加载。
与以下内容相同:
/bin/bash /scripts/count.sh
count.sh
,然后保存。现在您不希望第一个窗口自动获取更改吗?容器中发生了完全相同的过程。要获得第一个反映count.sh
更改的窗口,您需要重新启动它。
挂载卷只意味着文件更改在容器中可见,它对使用这些文件的任何进程都没有影响。
它在docker-compose示例中工作的原因是因为他们使用Flask作为示例应用程序。如果你在调试模式下运行Flask,它会在检测到文件发生任何变化时自动重新加载flask documentation(我强调):
烧瓶脚本很适合启动本地开发服务器,但是你 每次更改代码后都必须手动重新启动它。那 不是很好,Flask可以做得更好。 如果启用调试支持 服务器将在代码更改时重新加载,它也会 如果出现问题,请为您提供有用的调试器。
自动重装是烧瓶的特征,而不是码头组成。
答案 1 :(得分:0)
您需要在没有缓存的情况下运行构建。
docker-compose build --no-cache && docker-compose up