我希望能够在不破坏标准输入的情况下将某些内容传递到docker进程中。
我想我可以通过在生成docker进程之前在bash中打开一个新的文件描述符,然后在docker进程中使用此描述符来做到这一点。但是它不起作用
外部docker:
exec 4<>somefile.txt
docker run --rm -i image cmd args > output.txt
在docker内部:
exec 4>file.txt # also tried without the exec
do something with file.txt
docker容器到达4>file.txt
行时停止。
这必须是原子动作,所以我不能使用docker cp
或类似的东西。
另外,泊坞窗映像不会公开任何网络端口,因此无法使用netcat。
我宁愿不使用任何复杂的Docker挂载。
其他目的还需要STDIN,所以我不能破坏
是否还有其他选择可将文件内容放入临时容器中以供单个命令使用?
答案 0 :(得分:0)
通常的方法是将当前目录挂载到容器中。您可以在容器内选择任何目录名称,并应避免使用安装隐藏脚本本身。
docker run --rm -i -v $PWD:/data image \
cmd -i /data/file.txt -o /data/output.txt --other-args
文件系统权限可能很棘手,在这两个方面:您可以在-v
选项的前半部分命名 any 目录,甚至是/etc
之类的系统目录;并且如果容器中的进程以非root用户身份运行,则可能无法读取装入目录中的文件。
您可以bind-mount使用文件或目录,但要注意的是,它们必须首先存在于主机上,否则Docker将为您创建一个目录(即使您需要文件;并且可能归所有者所有) root,而不是您的本地用户。