掲題の通り、起動方法について教えていただきたいです。
docker-compose.ymlとDokerfileを用いてRails(5.2)アプリケーション配置用のサーバをテスト運用しています。
今回、開発者の間でサーバの環境に差異が生まれないようにしたく、理想としてはdocker-compose up -d --build
とコマンド入力したら、localhostでRailsのサーバにアクセスできるようにしたいと考えています。(※基本的にDockerコンテナには入らない)
私自身Dockerが初心者なので、うまくわかっていないところがあり、実装に手間取っています。
実際に使用しているDockerコンテキストファイルは以下になります。
docker
1version: '3' 2services: 3 web: 4 image: "my-app-management" 5 container_name: "my-app-management" 6 build: . 7 volumes: 8 - ../../my-app-management:/opt/my-app-management 9 ports: 10 - "3000:3000" 11 privileged: true 12 command: /sbin/init 13 db: 14 image: postgres:9 15 container_name: db 16 ports: 17 - '5432:5432' 18 volumes: 19 - ./postgres:/var/lib/postgresql/data 20 restart: always 21 environment: 22 POSTGRES_USER: user 23
Dockerfile
1# Docker Image 2FROM centos:7 3 4# Ruby version 5ENV ruby_ver="2.6.5" 6 7# 必要なパッケージをインストール 8RUN yum -y update 9RUN yum -y install git make memcached autoconf curl wget bzip2 gcc-c++ openssl-devel postgresql-devel readline-devel zlib zlib-devel tar which 10 11# rbenvとruby-bundleをダウンロード 12RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv 13RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build 14 15# コマンドでrbenvが使えるように設定 16RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh 17RUN echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh 18RUN echo 'eval "$(rbenv init --no-rehash -)"' >> /etc/profile.d/rbenv.sh 19 20# rbenvでrubyをインストール 21RUN source /etc/profile.d/rbenv.sh; rbenv install ${ruby_ver} 22RUN source /etc/profile.d/rbenv.sh; rbenv rehash 23RUN source /etc/profile.d/rbenv.sh; rbenv global ${ruby_ver} 24 25# bundlerのインストール 26RUN source /etc/profile.d/rbenv.sh; rbenv exec gem install bundler 27RUN source /etc/profile.d/rbenv.sh; rbenv rehash 28 29# my-app-managemen is bundle install && rails server boot 30WORKDIR /opt/my-app-management/ 31RUN /usr/local/rbenv/shims/bundle install --path vendor/bundle 32RUN /usr/local/rbenv/shims/bundle exec rails s -p 3000 -b 0.0.0.0.0 33 34WORKDIR / 35 36CMD ["/bin/bash"] 37
この状態でdocker-compose up -d --build
とすると以下のようなエラーが出力されます。
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine. Could not locate Gemfile
Gemfileが無いとのことなので、DokerfileでmyappにWORKDIRした直後でlsコマンドなどでディレクトリを確認しましたが、確かにGemfileはありません。(どころか何もありません)
Step 16/18 : RUN ls -la && true ---> Running in 32d081cc4faf total 8 drwxr-xr-x 2 root root 4096 Dec 23 06:12 . drwxr-xr-x 1 root root 4096 Dec 23 06:12 ..
念のためエラーになった行をコメントアウトしてコンテナに入り、ディレクトリを確認してみました。
$ docker-compose exec web /bin/bash [root@9ac9072cfc1d /]# cd opt/my-app-managemen/ [root@9ac9072cfc1d my-app-managemen]# ll total 18 -rwxr-xr-x 1 root root 1577 Dec 20 08:15 Gemfile -rwxr-xr-x 1 root root 4633 Dec 20 08:15 Gemfile.lock -rwxr-xr-x 1 root root 3480 Dec 20 08:15 Gemfile.lock.RSPEC_v2_0_0 -rwxr-xr-x 1 root root 82 Dec 20 08:15 README -rwxr-xr-x 1 root root 284 Dec 20 08:15 Rakefile drwxrwxrwx 2 root root 0 Dec 20 08:15 app drwxrwxrwx 2 root root 0 Dec 20 08:15 autotest drwxrwxrwx 2 root root 0 Dec 20 08:15 bin drwxrwxrwx 2 root root 0 Dec 20 08:15 config -rwxr-xr-x 1 root root 158 Dec 20 08:15 config.ru drwxrwxrwx 2 root root 0 Dec 20 08:15 db drwxrwxrwx 2 root root 0 Dec 20 08:15 doc drwxrwxrwx 2 root root 0 Dec 20 08:16 docker drwxrwxrwx 2 root root 0 Dec 20 08:15 etc drwxrwxrwx 2 root root 0 Dec 20 08:15 lib drwxrwxrwx 2 root root 0 Dec 20 08:24 log drwxrwxrwx 2 root root 0 Dec 20 08:15 nbproject drwxrwxrwx 2 root root 0 Dec 20 08:15 public drwxrwxrwx 2 root root 0 Dec 20 08:15 release drwxrwxrwx 2 root root 0 Dec 20 08:15 script drwxrwxrwx 2 root root 0 Dec 20 08:15 spec drwxrwxrwx 2 root root 0 Dec 20 08:20 tmp drwxrwxrwx 2 root root 0 Dec 20 08:18 vendor
Gemfileはありました。。
ここから色々調べましたが、欲しい情報が見つからなかったため、お力をお借りしたいです。
一旦今わからないことは、Gemfileが無いといわれる原因がわかりません。
Dockerfileが実行されるのはbuildされるタイミングかと思いますが、その時点ではまだdocker-compose.ymlで実行されるマウントが完了していないということでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/24 08:03