在将文件发送到docker容器以便编译和执行时,我遇到了一些问题。
在我运行命令的文件夹中,我有一个"编译器"文件夹和file.cpp(一个基本的hello world")。我使用这个命令:
sudo docker run --rm -it -v / compiler / dockcompiler file.cpp
这是输出:
useradd:warning:主目录已经存在。 不将任何文件从skel目录复制到其中。 chgrp:无法访问' / code':没有这样的文件或目录 chmod:无法访问' / code':没有这样的文件或目录 文件不存在
我的Dockerfile:
FROM ubuntu
RUN apt-get update
RUN apt-get install -y gcc g++
ADD entrypoint.sh entrypoint.sh
ADD run-code.sh run-code.sh
ENTRYPOINT ["/bin/bash", "entrypoint.sh"]
entrypoint.sh
prog=$1
uid=$2
if [ -z $1 ]; then
echo "you must provide a file"
exit 1
fi
if [ -z $uid ]; then
uid=10000
fi
echo "127.0.0.1 $(hostname)" >> /etc/hosts
groupadd code
useradd -u "$uid" -G code -d "/compiler" -m codecube
chgrp code /code
chmod 0775 /code
cd /compiler
sudo -u codecube /bin/bash /run-code.sh $prog
run-code.sh文件(如果我在终端中运行它会起作用):
prog=$1
if [ -z $1 ]; then
echo "you must provide a file"
exit 1
fi
if [ ! -f $1 ]; then
echo "file does not exist"
exit 1
fi
extension="${prog##*.}"
case "$extension" in
"cpp")
g++ $prog && ./a.out
;;
"c")
gcc $prog && ./a.out
;;
"go")
go run $prog
;;
"pl")
perl $prog
;;
"py")
python $prog
;;
"rb")
ruby $prog
;;
*)
echo "invalid language"
exit 1
;;
esac
答案 0 :(得分:1)
<强>更新强>
问题是-m codecube
,其中codecube
目录已经存在。此外,/code
目录不存在。
如果用户目录已存在于泊坞窗图像上(假设此处使用了修改后的图像)。然后只是skel文件副本应该做的伎俩你可以逃脱而不做useradd
。帖子here提供了更多相关信息。
#copy skel files
cp -r /etc/skel/. /codecube