草庐IT

php - TravisCI Docker 权限

coder 2024-05-05 原文

我使用 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/

有关php - TravisCI Docker 权限的更多相关文章

  1. ruby - rbenv 安装权限被拒绝 - 2

    大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe

  2. ruby-on-rails - 为什么用户必须输入 7 位数的 Twitter PIN 才能授予我的应用程序访问权限? - 2

    我正在为我的用户实现一些ruby​​onrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需

  3. ruby - rbenv:权限被拒绝 - 2

    我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="

  4. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  5. ruby-on-rails - 在服务器上没有互联网访问权限的 Capistrano 部署 - 2

    如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答

  6. ruby-on-rails - 使用 Ruby on Rails 处理回形针文件夹和文件权限 - 2

    我在运行Ubuntu10.04LTS的远程VPS机器上以生产模式运行RubyonRails3.0.9(在开发模式下,我在MACOSSnow上使用RoRLeopard),我想知道如何管理以下场景。我使用Apache2和PhusionPassenger并且我将虚拟主机设置为如下所示:ServerNameproject_name.comDocumentRoot/srv/www/project_name.com/publicAllowOverrideallOptions-MultiViews此外,我使用Paperclipgem,由于网上很多人在生产模式下使用它,我在处理(图像)文件时遇到以下错

  7. ruby - RVM:在系统范围安装中从 .rvmrc 文件加载 gemset 时权限被拒绝 - 2

    我创建了一个包含自定义gemset的项目特定.rvmrc文件(使用命令rvm--rvmrc--create1.9.2@registration):#excerptof.rvmrc...environment_id="ruby-1.9.2@registration"if[[-d"${rvm_path:-$HOME/.rvm}/environments"\&&-s"${rvm_path:-$HOME/.rvm}/environments/$environment_id"]]then\."${rvm_path:-$HOME/.rvm}/environments/$environment_id

  8. ruby-on-rails - 尝试安装 Rails (OSX) 时出现权限错误 - 2

    我是编程新手,正在尝试在我的终端上安装Rails。我一直按照friend的指示安装xcode命令行工具、自制软件、git、rbenv、ruby-build、rubygems、ruby和postgres。但是每当我尝试$geminstallrails时,我都会得到以下信息:Russell-Silvers-MacBook-Pro:~Russell_Silver$geminstallrailsERROR:Whileexecutinggem...(Errno::EACCES)Permissiondenied@rb_sysopen-/Users/Russell_Silver/.rbenv/ver

  9. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

  10. ruby-on-rails - PHP 魔术方法 __call、__get 和 __set 的 Ruby 等价物 - 2

    我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob

随机推荐