docker-compose没有选择更新的代码

时间:2017-04-05 06:20:59

标签: bash docker docker-compose

我刚接触到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中的示例,它工作正常,我得到了更新的代码。 但它不适用于我的例子。 请指教

2 个答案:

答案 0 :(得分:0)

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

与以下内容相同:

  1. 在计算机上打开终端,然后键入/bin/bash /scripts/count.sh
  2. 打开另一个终端会话,然后编辑count.sh,然后保存。
  3. 现在您不希望第一个窗口自动获取更改吗?容器中发生了完全相同的过程。要获得第一个反映count.sh更改的窗口,您需要重新启动它。

    挂载卷只意味着文件更改在容器中可见,它对使用这些文件的任何进程都没有影响。

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

      

    烧瓶脚本很适合启动本地开发服务器,但是你   每次更改代码后都必须手动重新启动它。那   不是很好,Flask可以做得更好。 如果启用调试支持   服务器将在代码更改时重新加载,它也会   如果出现问题,请为您提供有用的调试器。

    自动重装是烧瓶的特征,而不是码头组成。

答案 1 :(得分:0)

您需要在没有缓存的情况下运行构建。

docker-compose build --no-cache && docker-compose up