web-dev-qa-db-ja.com

docker-composeを使用してホストディレクトリに権限を追加する

Docker-composeを使用して開発環境をセットアップしようとしていますが、コンテナーにマウントされているHostディレクトリへのアクセス許可がコンテナーにないようです。フォルダーを変更しようとするgruntタスクを実行すると、このエラーが発生します。ボリューム内:

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

これが私のdockerファイルです:

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

と私のdocker-composeファイル:

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"
  • Docker-composeバージョン1.5.2、ビルド7240ff3でubuntu15.10を実行しています
  • :Z権限を使用していることに注意してください
8
Avi Farada

それは単なるファイルパーミッションです。

最初に気付くのは、マウントするボリュームには、Dockerfileで作成およびchownするフォルダーに対する異なるアクセス許可があるということです。ノードユーザーには、おそらくこのフォルダーにアクセスするためのアクセス許可がありません。次のようなものを実行することでこれを修正できます。

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

これにより、ホスト上のフォルダーのアクセス許可が変更されます。

または、npm install && bower installを実行するためにrootである必要がある場合は、rootユーザーをデフォルトユーザーのままにしてから、ノードユーザーに変更してアプリケーションを実行できます。何かのようなもの:

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

ここでは、 gos ツールを使用しました。これは、イメージにインストールする必要があります。 2番目のプロセスを開始しないため、Sudoよりも少し優れています。

3
Adrian Mouat