2016-11-05 6 views
2

Ich benutze Docker um meine PHP App zu starten. Jetzt möchte ich, dass Travis CI meine App testet. Aber alle meine Builds scheitern, weil Container Dateien im/temp-Verzeichnis meiner App nicht öffnen können.TravisCI Docker Permissions

Ich habe Datencontainer:

FROM ubuntu 

COPY ./ /project 
VOLUME /project 

CMD ["true"] 

ich meine eigenen PHP-FPM-Container verwenden, basierend auf PHP 7.0-fpm - nur mit einigen Erweiterungen installiert. Das Gleiche gilt für nginx.

Mein Docker compose sieht aus wie dieses

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 

können Sie sehen, dass ich mit dem Host gemeinsamen Lautstärke. Alles funktioniert auf meinem lokalen Rechner (Windows), aber nicht auf Travis.

Und endlich meine 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 

Alle codeception Tests fehlschlägt, weil App nicht schreiben kann/log und kann nicht geöffnet werden Dateien in/temp. Es ist interessant, weil es einige Dateien schreibt, aber später nicht öffnen kann.

I ls -la mit Ergebnis:

# ./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 

Ich bin ein ziemlich sicher, dass ich in travis oder in Container schlecht Berechtigungen haben, aber ich weiß nicht, wie man es beheben.

Antwort

1

Die von Travis abgerufenen Dateien gehören dem travis Benutzer und der Gruppe, während die im Container ausgeführten Prozesse erwarten, dass der aktive Benutzer der Eigentümer ist. Ich hatte dieses Problem mit einer Docker-Compose-Datei, die auf meinem Mac gut lief, Travis aber nicht.

Für mich wurde dies, indem diese auf den in meiner .travis.yamlinstall Schritt behoben (edit: Sie wahrscheinlich es stattdessen in Ihrem before_script Abschnitt wollen werden):

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

Diese Zuschreibung auf UID/GID Bits war hilfreich: Understanding user file ownership in docker: how to avoid changing permissions of linked volumes