2015-12-30 34 views
6

我正在嘗試使用docker-compose 設置開發環境,並且我的容器似乎沒有對安裝到容器的主機目錄 的權限,使用docker-compose向主機目錄添加權限

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

這裏是我的搬運工文件:運行 當試圖修改卷文件夾內的一個咕嚕任務m如果這個錯誤

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 

和我的搬運工,撰寫文件:

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" 
  • 我運行Ubuntu 15.10與碼頭工人,撰寫版本1.5.2,構建我使用7240ff3
  • 注位:Z許可
+0

嗯,你設置了權限,但是你在上面掛載了一個卷,它將擁有不同的權限。 –

+0

但是看起來權限是用node + root做的 - 如果你刪除USER節點行,它是否工作? –

+0

@AdrianMouat - 我嘗試刪除mkdir行,我同意它是多餘的,但它不是什麼打破我的權限,據我所知,得到了相同的錯誤 要求編輯Dockerfile:https://gist.github.com/avif/a7a99b14a6abca6157e6 我嘗試刪除節點用戶相關的行,它確實工作(!),雖然現在應用程序正在使用與我的生產設置不同的root用戶 - 這是首先使用docker的全部要點。 .. 要求編輯Dockerfile:https://gist.github.com/avif/c26d7a389aad11e8e69d 但是,謝謝,至少現在問題是孤立的節點用戶 –

回答

2

這只是一個文件權限的事情。

首先要認識到的是,您正在安裝的卷對您在Dockerfile中創建和製作的文件夾具有不同的權限。節點用戶可能沒有權限訪問此文件夾。您可以通過運行如下來修復此問題:

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

這將更改主機上文件夾的權限。

或者,如果您需要以root身份運行npm install && bower install,則可以將root用戶保留爲默認用戶,然後切換到節點用戶以運行該應用程序。喜歡的東西:

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

在這裏,我使用了gosu工具,你需要在圖像中進行安裝。這比sudo好一點,因爲它不會啓動第二個過程。

+0

正如我所見,第一個命令以root用戶身份運行docker鏡像,然後將具有該用戶權限的/ user/src/app文件夾掛載到 ,然後繼續使用chown命令爲節點用戶授予該文件夾的權限以及。 這對我不起作用,仍然沒有權限給節點用戶, 這裏有一個要點,我試圖用docker-compose:https://gist.github。com/avif/8cf231ebda​​31cba379f9 我將root用戶留在Dockerfile中 –

+0

如果關閉selinux,它是否工作? –

+0

不能,禁用selinux並沒有效果 –