TravisCI - Docker - 执行失败

TravisCI - Docker - Exec failing

我正在尝试在 TravisCI 中启动一个容器,然后对其进行一些 docker exec。但它每次都以 255 错误代码失败。

我不明白的是该过程在本地运行良好。
然后我 updated my travisCI script to something very simple 使用标准容器 (ubuntu)。同样的事情正在发生。

我只是拉了一个图像,运行 没完没了,然后尝试对它执行一些 exec。我使用文件 container_id 来存储容器 ID(该部分有效)。

这是我的代码:

$ docker pull ubuntu:latest
latest: Pulling from ubuntu
age you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Status: Downloaded newer image for ubuntu:latest

$ docker run -d ubuntu:latest sh -c "while true; do sleep 5; done" > container_id
The command "docker run -d ubuntu:latest sh -c "while true; do sleep 5; done" > container_id" exited with 0.

$ docker logs `cat container_id`
The command "docker logs `cat container_id`" exited with 0.

$ docker exec `cat container_id` sh -c "mkdir /repository"
The command "docker exec `cat container_id` sh -c "mkdir /repository"" exited with 255.

$ docker logs `cat container_id`
The command "docker logs `cat container_id`" exited with 0.

$ docker exec `cat container_id` sh -c "cd /repository ; git clone https://github.com/tdeheurles/homecores"
The command "docker exec `cat container_id` sh -c "cd /repository ; git clone https://github.com/tdeheurles/homecores"" exited with 255.

$ docker logs `cat container_id`
The command "docker logs `cat container_id`" exited with 0.

$ docker exec `cat container_id` sh -c "cd /repository/homecores ; ./test/test.sh"
The command "docker exec `cat container_id` sh -c "cd /repository/homecores ; ./test/test.sh"" exited with 255.

$ docker logs `cat container_id`
The command "docker logs `cat container_id`" exited with 0.
Done. Your build exited with 1.

255表示发生错误。
在像 mkdir /repository 这样简单的东西上,这可能意味着 docker exec sh 会话中的用户 ID 不是 root,并且无权在 /.

中创建文件夹

通过添加一个中间体来检查:

docker exec `cat container_id` sh -c "id -a"

docker exec man page提到了-u--user=选项,你可以试试:

docker exec -u root `cat container_id` sh -c "mkdir /repository"

从下面的讨论看来,错误可能与缺少 lxc 驱动程序有关。

有帮助(至少在 circleci: see their doc on docker exec 上)的是

sudo lxc-attach -n "$(docker inspect --format '{{.Id}}' hctest)" -- bash -c ls

尝试 docker 在 Travis 中执行任何操作时遇到同样的问题。我在 /var/log/upstart/docker.log:

中注意到这条错误消息

ERRO[0054] Error starting exec command in container 85f99b93c5307fe8ec45ea4e743147869cc25a3e5dfb91b623dd6b3eede1da3b: Cannot run exec command 85f99b93c5307fe8ec45ea4e743147869cc25a3e5dfb91b623dd6b3eede1da3b in container 8f40f7b49658cc9661446f61492d36f02e371bd4a22ef2f892f258bb856ea7e6: [8] System error: permission denied

经过一些挖掘,我可以通过在特权模式下 运行ning docker 个容器来解决这个问题(docker 运行 --privileged)。希望对你有帮助。