2015-12-30 13 views
6

Próbuję skonfigurować środowisko programistyczne za pomocą dokowania-komponowania , a mój kontener nie ma uprawnień do katalogu hosta , który jest podłączony do kontenera, i ' m uzyskiwanie ten błąd, gdy uruchomiony zadanie grunt, który próbuje modyfikować foldery wewnątrz objętość:Dodawanie uprawnień do katalogu hosta za pomocą dokowania-komponowania

app_1     | Warning: Unable to delete ".tmp" file (EACCES, permission denied '.tmp'). Use --force to continue. 

Oto mój plik doker:

FROM node:0.10 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

RUN apt-get update \ 
    && apt-get install -y --no-install-recommends ruby-sass \ 
    && rm -rf /var/lib/apt/lists/* \ 
    && apt-get clean -y \ 
    && apt-get autoremove -y 

RUN npm install -g grunt-cli bower 

RUN groupadd -r node \ 
&& useradd -r -m -g node node 

RUN chown -R node:node /usr/src/app 

USER node 

EXPOSE 8080 

i mój plik doker-komponować:

app: 
    build: . 
    dockerfile: Dockerfile.dev 
    ports: 
    - "9000:9000" 
    env_file: 
    - ./server/config/env/development.env 
    volumes: 
    - ./:/usr/src/app:Z 
    command: bash -c "npm install && bower install && grunt dev && npm start" 

db: 
    ports: 
    - "27017:27017" 
  • Mam Ubuntu 15.10 z Docker-komponować wersji 1.5.2, budować 7240ff3
  • Zauważ, że używam: § pozwolenie
+0

Ustawiasz uprawnienia, ale potem montujesz wolumin na górze, który będzie miał różne uprawnienia. –

+0

Ale wygląda na to, że uprawnienia mają zrobić z węzłem vs rootem - czy to działa, jeśli usuniesz linię węzła USER? –

+0

@AdrianMouat - Próbowałem usunąć linię mkdir, zgadzam się, że jest zbędna, ale to nie jest to, co łamie moje uprawnienia, o ile widzę, dostałem ten sam błąd gist do edytowanego pliku Dockerfile: https://gist.github.com/avif/a7a99b14a6abca6157e6 Próbowałem usunąć linie powiązane z użytkownikiem węzła i działało (!), chociaż teraz aplikacja używa użytkownika root, który różni się od mojej konfiguracji produkcyjnej - na czym przede wszystkim chodziło używanie dockera. .. gist do edytowanego pliku Dockerfile: https://gist.github.com/avif/c26d7a389aad11e8e69d ale dzięki, przynajmniej teraz problem jest odizolowany od użytkownika węzła –

Odpowiedz

2

To tylko uprawnienia do plików rzecz .

Pierwszą rzeczą, jaką należy sobie uświadomić, jest to, że objętość, którą instalujesz, ma różne uprawnienia do folderu, który utworzysz i zapiszesz w pliku Dockerfile. Użytkownik węzła prawdopodobnie nie ma uprawnień dostępu do tego folderu. Możesz to naprawić, uruchamiając coś w stylu:

$ docker run -u root -v $(pwd):/usr/src/app:Z my_app_image chown -R node:node /usr/src/app 

Spowoduje to zmianę uprawnień do folderu na hoście.

Alternatywnie, jeśli musisz być rootem, aby uruchomić npm install && bower install, możesz pozostawić użytkownika root jako domyślnego użytkownika, a następnie zmienić na użytkownika węzła, aby uruchomić aplikację. Coś jak:

npm install && bower install && gosu node npm start 

Tutaj Użyłem narzędzia gosu, które trzeba będzie zainstalować w obrazie. Jest trochę ładniejszy niż sudo, ponieważ nie rozpoczyna drugiego procesu.

+0

Jak widzę, pierwsze polecenie uruchamia obraz doka z użytkownikiem root i montuje folder/user/src/app z uprawnieniami do tego użytkownika, następnie przechodzisz do użycia polecenia chown, aby nadać użytkownikowi węzła uprawnienia do folderu także. To nie działało dla mnie, nadal nie ma uprawnień dla użytkownika węzła, jest tutaj sedno mojej próby wykonania tego za pomocą docker-compose: https: //gist.github.com/avif/8cf231ebda31cba379f9 Zostawiłem użytkownika root w pliku Dockerfilmu –

+0

Czy to działa, jeśli wyłączysz selinux? –

+0

Nie, selinux na wyłączonym nie działał. –

Powiązane problemy