gpt4 book ai didi

php - TravisCI Docker 权限

转载 作者:可可西里 更新时间:2023-11-01 01:15:26 24 4
gpt4 key购买 nike

我使用 Docker 来运行我的 PHP 应用程序。现在我想让 Travis CI 测试我的应用程序。但是我所有的构建都失败了,因为容器无法打开我应用程序的/temp 目录中的文件。

我有数据容器:

FROM ubuntu

COPY ./ /project
VOLUME /project

CMD ["true"]

我使用自己的基于 php:7.0-fpm 的 PHP fpm 容器——只安装了一些扩展。 nginx 也一样。

我的 docker compose 看起来像这样

version: '2'
services:
data:
build: ./
volumes:
- .:/project
command: "true"
nginx:
image: myNginx
ports:
- "80:80"
- "443:443"
volumes_from:
- data
links:
- php
php:
image: myPhp
ports:
- "9000:9000"
volumes_from:
- data

您可以看到我与主机使用共享卷。在我的本地机器 (windows) 上一切正常,但在 travis 上不行。

最后是我的 travis.yml

sudo: required

language: php

services:
- docker

before_script:
- docker-compose up --build -d
# Run firefox
- docker run -d -p 4444:4444 -p 5900:5900 --name firefox --link my_nginx:nginx --net myapp_default selenium/standalone-firefox-debug:2.53.0

script:
# Run Codeception
- docker run --rm --volumes-from my_data --link firefox --net myapp_default --name codeception codeception/codeception run accept

所有代码检测测试均失败,因为应用无法写入/log 并且无法打开/temp 中的文件。这很有趣,因为它写入了一些文件,但后来无法打开它。

I ls -la 结果:

# ./temp
drwxrwxr-x 3 travis travis 4096 Nov 4 15:55 .
drwxrwxr-x 14 travis travis 4096 Nov 4 15:56 ..
drwxr-xr-x 4 root root 4096 Nov 4 15:55 cache
-rw-rw-r-- 1 travis travis 14 Nov 4 15:49 .gitignore

# ./temp/cache
drwxr-xr-x 4 root root 4096 Nov 4 15:55 .
drwxrwxr-x 3 travis travis 4096 Nov 4 15:55 ..
drwxr-xr-x 2 root root 4096 Nov 4 15:55 Nette.Configurator
drwxr-xr-x 2 root root 4096 Nov 4 15:55 _Nette.RobotLoader

# ./temp/cache/Nette.Configurator
drwxr-xr-x 2 root root 4096 Nov 4 15:55 .
drwxr-xr-x 4 root root 4096 Nov 4 15:55 ..
-rw-r--r-- 1 root root 116093 Nov 4 15:55 Container_70d15d6361.php
-rw-r--r-- 1 root root 0 Nov 4 15:55 Container_70d15d6361.php.lock
-rw-r--r-- 1 root root 52913 Nov 4 15:55 Container_70d15d6361.php.meta

我很确定我在 travis 或容器中设置了错误的权限,但我不知道如何修复它。

最佳答案

Travis 拉取的文件将归 travis 用户和组所有,而在容器内运行的进程期望事件用户成为所有者。我遇到了一个 docker-compose 文件的问题,该文件在我的 Mac 上运行良好,但在 Travis 上运行失败。

对我来说,这是通过将它添加到我的 .travis.yaml 中的 install 步骤来解决的(编辑:你可能会想要它在你的 before_script 部分代替):

install
- docker-compose run --user='root' --entrypoint chown worker_test -R myuser:myuser .

这篇关于 UID/GID 位的文章很有帮助:Understanding user file ownership in docker: how to avoid changing permissions of linked volumes

关于php - TravisCI Docker 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com