2016-11-05 6 views
2

Я использую Docker для запуска своего PHP-приложения. Теперь я хочу, чтобы Travis CI тестировал мое приложение. Но все мои сборки не работают, потому что контейнеры не могут открывать файлы в каталоге/temp моего приложения.Права на докеры TravisCI

У меня есть контейнер данных:

FROM ubuntu 

COPY ./ /project 
VOLUME /project 

CMD ["true"] 

Я использую свой собственный контейнер PHP FPM на основе PHP: 7,0-FPM - только с установленными некоторыми расширениями. То же самое для nginx.

Мой докер 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 

Вы можете увидеть, что я использую общий объем с хостом. Все работает на моей локальной машине (окнах), но не на 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 

Все тесты codeception терпит неудачу, потому что приложение не может записывать/LOG и не может открывать файлы в/темп. Это интересно, потому что он пишет некоторые файлы, но позже он не может его открыть.

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 или в контейнере, но я не знаю, как это исправить.

ответ

1

Файлы, которые Travis тянет, будут принадлежать пользователю и группе travis, в то время как процессы, запущенные внутри контейнера, ожидают, что активным пользователем станет владелец. У меня была эта проблема с файлом-сборщиком docker, который отлично работал на моем Mac, но не сработал на Travis.

Для меня это было зафиксировано путем добавления этого к install шага в .travis.yaml (Edit: вы, вероятно, хотите в вашем 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

Смежные вопросы