无法在Travis-CI中通过docker编译cpp:/ usr / bin / ld:无法打开输出文件a.out:权限被拒绝

时间:2015-12-29 02:55:00

标签: docker travis-ci

我正在使用一个非常简单的.travis.yml来通过Travis-CI中的docker编译cpp程序。 (我的动机是在特拉维斯CI中试验运行码头工人。)

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 is failing有以下错误: /usr/bin/ld: cannot open output file a.out: Permission denied。这与我是否使用sudo无关。有人可以帮助我找出根本原因并帮助解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:1)

我建议您明确设置安装路径,而不是$(pwd)。然后,您需要检查容器内的权限。尝试类似的东西:

sudo docker run --rm -v "$(pwd)":/app -w /app glot/clang stat /app

这将显示文件夹权限。可能没人能写入这个文件夹。

此外,您应该避免使用root权限构建软件,这是不安全的。创建非priveleged用户并在运行编译器时使用它们。

<强> UPD: 我无法使用docker 1.6.0重现此问题,可能是由Travis-CI虚拟机持久保存的某些文件系统设置引起的。这就是我在localhost上的内容:

➜  /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文件夹