2016-11-05 105 views
2

我使用Docker來運行我的PHP應用程序。現在我想讓Travis CI來測試我的應用程序。但是我的所有版本都失敗了,因爲容器無法打開我的應用的/ temp目錄中的文件。TravisCI Docker權限

我有數據容器:

FROM ubuntu 

COPY ./ /project 
VOLUME /project 

CMD ["true"] 

我用我自己的PHP FPM容器基於php: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 

你可以看到,我使用的共享卷與主機。一切適用於我的本地機器(Windows),但不適用於Travis。

而且finaly我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測試,因爲應用程序無法寫入/日誌,不能在/臨時打開的文件失敗。這很有趣,因爲它寫了一些文件,但後來無法打開它。

我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 

我是個很肯定,我有不好的權限特拉維斯或容器設置,但我不`噸知道如何解決它。

回答

1

Travis提取的文件將由travis用戶和組擁有,而容器內運行的進程期望活動用戶成爲所有者。我遇到了一個docker-compose文件,它在我的Mac上運行良好,但在Travis上失敗。

對於我來說,這是固定的,加入這個到install一步我.travis.yaml(編輯:你可能想在你的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

相關問題