【问题标题】:inotifywait with Docker command and variable带有 Docker 命令和变量的 inotifywait
【发布时间】:2017-11-09 01:44:38
【问题描述】:

我正在尝试创建一个 shell 脚本,该脚本将检查新文件,然后 cp 到 Docker 容器。我到目前为止的代码是......

#!/bin/sh


source="/var/www/html/"
dest="dev_ubuntu:/var/www/html/"

inotifywait -m "/var/www/html" -e create -e moved_to |
while read file; do
    sudo docker cp /var/www/html/$file dev_ubuntu:/var/www/html
done

但是这段代码给出了以下错误:

Setting up watches.
Watches established.
"docker cp" requires exactly 2 argument(s).
See 'docker cp --help'.

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Copy files/folders between a container and the local filesystem

我做错了什么?

【问题讨论】:

    标签: shell ubuntu docker inotifywait


    【解决方案1】:

    您的文件名中有空格吗?使用双引号避免用单词分隔文件名:

    echo $file
    sudo docker cp "$file" dev_ubuntu:"$file"
    

    我还回显了文件名以查看发生了什么。

    【讨论】:

    • 文件名确实有空格,我为空格添加了“_”。并将代码更改为sudo docker cp "/var/www/html/$file" dev_ubuntu:/var/www/html 现在我收到以下错误lstat /var/www/html/var: no such file or directory
    • 有了这个,你想避免 docker 卷,对吧?因为卷是针对您的用例而设计的
    • 不客气。我也在第二个 $file 中添加了双引号
    • 这个也可以:#!/bin/sh MONITORDIR="/var/www/html/" inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE do echo "File ${NEWFILE} has been created TEST" sudo docker cp ${NEWFILE} dev_ubuntu:/var/www/html done
    • 太棒了。为什么不使用 docker volume?
    猜你喜欢
    • 2020-11-18
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2014-09-30
    相关资源
    最近更新 更多