将文件作为参数发送到容器以进行编译会导致问题
Sending a file as a parameter to a container in order to be compiled causes problems
我在将文件发送到 docker 容器以便编译和执行时遇到了一些问题。
在我正在 运行 命令的文件夹中,我有一个 "compiler" 文件夹和一个 file.cpp(一个基本的 hello world")。我正在使用这个命令:
sudo docker run --rm -it -v /compiler/ dockcompiler file.cpp
这是输出:
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
chgrp: cannot access '/code': No such file or directory
chmod: cannot access '/code': No such file or directory
file does not exist
我的 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=
uid=
if [ -z ]; 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
和 运行-code.sh 文件(如果我在终端中 运行 它就可以工作):
prog=
if [ -z ]; then
echo "you must provide a file"
exit 1
fi
if [ ! -f ]; 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
更新:
问题是 -m codecube
,它说 codecube
目录已经存在。此外,/code
目录不存在。
如果用户目录已经在您的 docker 图像上(假设此处使用的是经过修改的图像)。然后只需复制 skel 文件就可以解决问题,您无需执行 useradd
即可逃脱。 post here 提供了更多相关信息。
#copy skel files
cp -r /etc/skel/. /codecube
我在将文件发送到 docker 容器以便编译和执行时遇到了一些问题。
在我正在 运行 命令的文件夹中,我有一个 "compiler" 文件夹和一个 file.cpp(一个基本的 hello world")。我正在使用这个命令:
sudo docker run --rm -it -v /compiler/ dockcompiler file.cpp
这是输出:
useradd: warning: the home directory already exists. Not copying any file from skel directory into it. chgrp: cannot access '/code': No such file or directory chmod: cannot access '/code': No such file or directory file does not exist
我的 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=
uid=
if [ -z ]; 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
和 运行-code.sh 文件(如果我在终端中 运行 它就可以工作):
prog=
if [ -z ]; then
echo "you must provide a file"
exit 1
fi
if [ ! -f ]; 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
更新:
问题是 -m codecube
,它说 codecube
目录已经存在。此外,/code
目录不存在。
如果用户目录已经在您的 docker 图像上(假设此处使用的是经过修改的图像)。然后只需复制 skel 文件就可以解决问题,您无需执行 useradd
即可逃脱。 post here 提供了更多相关信息。
#copy skel files
cp -r /etc/skel/. /codecube