将文件作为参数发送到容器以便进行编译会导致问题

将文件发送到docker容器以便编译和执行时,我遇到了一些问题。

在运行命令的文件夹中,我有一个“编译器”文件夹和一个file.cpp(一个基本的Hello World),我使用这个命令:

sudo docker运行–rm -it -v / compiler / dockcompiler file.cpp

这是输出:

useradd:警告:主目录已经存在。 不从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文件(它工作,如果我在terminal中运行):

  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 

更新:

问题是-m codecube它说codecube目录已经存在。 另外, /code目录不存在。

如果用户目录已经在您的泊坞窗图片上(假设这里使用了一个修改过的图片)。 然后,只是skel文件副本应该做的伎俩,你可以离开,而不做useradd 。 这里的post提供了更多的信息。

 #copy skel files cp -r /etc/skel/. /codecube