2016-11-05 4 views
2

나는 Docker를 사용하여 PHP 응용 프로그램을 실행합니다. 이제 Travis CI에서 내 앱을 테스트 해 보겠습니다. 하지만 컨테이너가 내 앱의/temp 디렉토리에있는 파일을 열 수 없기 때문에 모든 빌드가 실패합니다. TravisCI Docker 권한

FROM ubuntu 

COPY ./ /project 
VOLUME /project 

CMD ["true"] 

내가 PHP를 기반으로 내 자신의 PHP FPM 컨테이너를 사용합니다 :

나는 데이터 컨테이너가 7.0-FPM을 - 일부 확장 만 설치된. nginx와 동일합니다.

내 고정 표시기의 작성 당신은 내가 호스트와 공유 볼륨을 사용하는 것을 볼 수있다이

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.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 테스트가 실패합니다. 일부 파일을 쓰지만 나중에 열 수 없으므로 흥미 롭습니다. 결과

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 

내가 트래비스 또는 용기에 설정 나쁜 권한이 있는지 확신 ma에,하지만 난 그것을 해결하는 방법을 모르겠어요.

답변

1

트래비스가 가져 오는 파일은 travis 사용자 및 그룹이 소유하며 컨테이너 내부에서 실행중인 프로세스는 활성 사용자가 소유자가 될 것으로 예상합니다. 내 Mac에서 잘 돌아가고있는 docker-compose 파일로이 문제가 발생했지만 Travis에서는 실패했습니다.

은 나를 위해,이 내 .travis.yamlinstall 단계로이를 추가하여 수정되었습니다 (편집 : 당신은 아마 대신 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