我已经将(假设的)程序dhprog
上传到Docker Hub,它的工作方式如下:
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it dhuser/dhimage dhprog arg1 arg2
该程序的非dockerized版本的工作方式如下:
dhprog arg1 arg2
我有
-v
,因为我想使当前目录在容器中作为/workdir
可用(这样,如果arg1
是容器外部的文件名,则容器中的dhprog
可以读取该文件)。我有
-u
,因为我想以非root用户身份在容器中运行dhprog
,并且如果arg2
是输出文件名,它应该将其与调用docker run
命令的UID和GID相同地写入容器外部。如何在不影响2种功能(在容器外部读写文件)以及在容器外部将文件写为非root用户的情况下,使
docker run
命令行更短,尤其是-v
和-u
标志。调用用户? 最佳答案
唯一真正的选择是分发一个shell脚本,为您打包所有脚本。例如,制作一个名为dhprog
的shell脚本,如下所示:
#!/bin/sh
exec docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" \
--rm -it dhuser/dhimage dhprog "$@"
我会避免使用bash别名,因为在许多情况下这些别名将不可用,而
$PATH
中的脚本的工作原理与任何其他二进制文件一样。