无法在Travis-CI中通过docker编译cpp:/ usr / bin / ld:无法打开输出文件a.out:Permission denied
我正在使用一个非常简单的.travis.yml在Travis-CI中通过docker编译一个cpp程序。 (我的动机是在Travis CI中运行Docker。)
sudo: required services: - docker before_install: - docker pull glot/clang script: - sudo docker run --rm -v "$(pwd)":/app -w /app glot/clang g++ main.cpp
但构build失败 ,出现以下错误: /usr/bin/ld: cannot open output file a.out: Permission denied
。 这是不pipe我是否使用sudo
。 有人可以帮我找出根源并帮助解决这个问题吗? 谢谢。
我build议你明确地设置安装path,而不是用$(pwd)
来做。 然后,您需要检查容器内的权限。 尝试类似的东西:
sudo docker run --rm -v "$(pwd)":/app -w /app glot/clang stat /app
这将显示文件夹的权限。 可能没有人能够写入这个文件夹。
你也应该避免使用root
权限来构build你的软件,这是不安全的。 创build非特权用户并在运行编译器时使用它们。
UPD:我无法用docker 1.6.0
来重现这个问题,这可能是由Travis-CI虚拟机持续存在的一些文件系统设置造成的。 这是我在我的本地主机上:
➜ /tmp mkdir /tmp/code ➜ /tmp echo "int main(){}" > /tmp/code/main.cpp ➜ /tmp echo "g++ main.cpp && ls -l" > /tmp/code/build.sh ➜ /tmp docker run --rm -v /tmp/code:/app -w /app glot/clang bash /app/build.sh total 20 -rwxr-xr-x 1 glot glot 8462 Dec 30 10:19 a.out -rwxrwxr-x 1 glot glot 22 Dec 30 10:17 build.sh -rw-rw-r-- 1 glot glot 13 Dec 30 10:10 main.cpp
正如你所看到的,最终的二进制文件出现在/app
文件夹中