質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

2回答

3249閲覧

”docker-compose run web rails new”で作成されるファイルがroot権限になる

ryo_o

総合スコア12

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2021/01/16 17:01

前提・実現したいこと

Docker + Rails6 + PostgreSQL 環境構築
上記の記事を参考にrails6の環境構築を行っています。
以下のようにrails newで生成されるファイルやフォルダがroot権限なのでエディタでコードを書くことができなくて困っています。
一つ一つ権限をユーザーに変えていくのはとても大変なので一般ユーザー(boko)でファイルを生成する方法を知りたいです。
皆さんはどのようにこれらに対応しているのか教えていただきたいです!!

発生している問題

bash

1$ ls -l 2total 76 3-rw-r--r-- 1 boko boko 896 Jan 17 01:20 Dockerfile 4-rw-r--r-- 1 boko boko 2178 Jan 17 01:23 Gemfile 5-rw-r--r-- 1 boko boko 0 Jan 17 01:06 Gemfile.lock 6-rw-r--r-- 1 root root 374 Jan 17 01:23 README.md 7-rw-r--r-- 1 root root 227 Jan 17 01:23 Rakefile 8drwxr-xr-x 11 root root 4096 Jan 17 01:23 app 9drwxr-xr-x 2 root root 4096 Jan 17 01:23 bin 10drwxr-xr-x 5 root root 4096 Jan 17 01:23 config 11-rw-r--r-- 1 root root 160 Jan 17 01:23 config.ru 12drwxr-xr-x 2 root root 4096 Jan 17 01:23 db 13-rw-r--r-- 1 boko boko 358 Jan 17 01:07 docker-compose.yml 14-rw-r--r-- 1 boko boko 203 Jan 17 01:07 entrypoint.sh 15drwxr-xr-x 4 root root 4096 Jan 17 01:23 lib 16drwxr-xr-x 2 root root 4096 Jan 17 01:23 log 17-rw-r--r-- 1 root root 219 Jan 17 01:23 package.json 18drwxr-xr-x 2 root root 4096 Jan 17 01:23 public 19drwxr-xr-x 2 root root 4096 Jan 17 01:23 storage 20drwxr-xr-x 10 root root 4096 Jan 17 01:23 test 21drwxr-xr-x 6 root root 4096 Jan 17 01:23 tmp 22drwxr-xr-x 2 root root 4096 Jan 17 01:23 vendor

該当のソースコード

以下が該当するであろう、ターミナルでのコマンド、Dockerfile、docker-compose.ymlです。

bash

1$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle

dockerfile

1FROM ruby:2.6.5 2 3# 必要なライブラリインストール 4RUN apt-get update -qq && apt-get install -y nodejs postgresql-client 5 6# yarnパッケージ管理ツールをインストール 7RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 8 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 9 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 10 apt-get update && apt-get install -y yarn 11 12# Node.jsをインストール 13RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ 14 apt-get install nodejs 15 16RUN mkdir /hey_app 17WORKDIR /hey_app 18COPY Gemfile /hey_app/Gemfile 19COPY Gemfile.lock /hey_app/Gemfile.lock 20RUN bundle install 21COPY . /hey_app 22 23COPY entrypoint.sh /usr/bin/ 24RUN chmod +x /usr/bin/entrypoint.sh 25ENTRYPOINT ["entrypoint.sh"] 26EXPOSE 3000 27 28CMD ["rails", "server", "-b", "0.0.0.0"]

yml

1version: '3' 2services: 3 db: 4 image: postgres 5 volumes: 6 - ./tmp/db:/var/lib/postgresql/data 7 environment: 8 - POSTGRES_PASSWORD=password 9 web: 10 build: . 11 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 12 volumes: 13 - .:/hey_app 14 ports: 15 - "3000:3000" 16 depends_on: 17 - db

調べたこと

調べた所この問題はMacでは起こらなくLinux環境で起こるそうです。

補足情報(FW/ツールのバージョンなど)

ubuntu20.04(wsl2)
Docker version 20.10.2, build 2291f61
docker-compose version 1.27.4, build 40524192

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

"docker-compose run web bin/rails ..." を rrun.sh というシェルスクリプト

bash

1#!/bin/sh 2 3USER_ID=`id | sed -e 's/^uid=(.*)((.*)) gid=.*$/\1/'` 4GROUP_ID=`id | sed -e 's/uid=.* gid=(.*)((.*)) groups=.*/\1/'` 5 6LOCAL_UID=${USER_ID} LOCAL_GID=${GROUP_ID} docker-compose run web bin/rails $* 7sudo chown -R ${USER_ID}:${GROUP_ID} .

"docker-compose exec web bin/rails ..." を rexec.sh というシェルスクリプト

bash

1#!/bin/sh 2 3USER_ID=`id | sed -e 's/^uid=(.*)((.*)) gid=.*$/\1/'` 4GROUP_ID=`id | sed -e 's/uid=.* gid=(.*)((.*)) groups=.*/\1/'` 5 6LOCAL_UID=${USER_ID} LOCAL_GID=${GROUP_ID} docker-compose exec web bin/rails $* 7sudo chown -R ${USER_ID}:${GROUP_ID} .

として、ともかく最後には chown を実行する、という方法はどうでしょうか。

別の方法として

https://futureys.tokyo/how-permission-should-be-set-for-developing-inside-a-container-using-wsl-2/

で、wsl内のユーザーを全てrootとする方法が提案されていますが、ちょっとやりすぎな気がしたのでスクリプトを使う方法に落ちついています。

投稿2021/04/24 16:58

tohosaku

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一つ一つ権限をユーザーに変えていくのはとても大変なので一般ユーザー(boko)でファイルを生成する方法を知りたいです。
皆さんはどのようにこれらに対応しているのか教えていただきたいです!!

ホスト上のディレクトリやファイルを、コンテナ内にボリュームでマウントする時は、いくつかの作業が必要です。

一般的には、Dockerfile で、対象のイメージ内でユーザを作成する(adduserなど)手順の追加が必要です。さらに、ホスト側とコンテナ内で、どちらからも同じ権限で操作したい場合は、ホスト側との uid とイメージ内で揃えておく必要があります。

投稿2021/04/05 12:07

zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問