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

时间:2015-01-24 13:58:06

标签: bash docker sandbox

在将文件发送到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

1 个答案:

答案 0 :(得分:1)

<强>更新

问题是-m codecube,其中codecube目录已经存在。此外,/code目录不存在。

如果用户目录已存在于泊坞窗图像上(假设此处使用了修改后的图像)。然后只是skel文件副本应该做的伎俩你可以逃脱而不做useradd。帖子here提供了更多相关信息。

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