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

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

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

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

Ruby on Rails

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

Docker

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

Q&A

解決済

2回答

3520閲覧

vscode remote container利用時、railsの開発環境にアクセスできない

d0ne1s

総合スコア32

docker-compose

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

Ruby on Rails

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

Docker

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

1グッド

1クリップ

投稿2020/03/12 02:38

##実現したいこと
Dockerのコンテナ内でVSCodeを動かして、Railsアプリを開発したい

##できたこと

  • Remote - Containersの拡張機能を使い、Dockerのコンテナ内でVSCodeを開く
  • bin/rspecで、コンテナ内でテストを走らせる

##問題点
ブラウザでhttp://127.0.0.1:3000/http://0.0.0.0:3000/にアクセスしてもページにアクセスできない。

// chromeに表示されるメッセージ このページは動作していません 127.0.0.1 からデータが送信されませんでした。 ERR_EMPTY_RESPONSE 再読み込み

##試したこと

terminal

1root@12345abc:/workspace# bin/rails s -b 0.0.0.0 2 3=> Booting Puma 4=> Rails 6.0.2.1 application starting in development 5=> Run `rails server --help` for more startup options 6A server is already running. Check /workspace/tmp/pids/server.pid. 7Exiting

terminal

1root@12345abc:/workspace# rm /workspace/tmp/pids/server.pid 2 3root@12345abc:/workspace# rails s 4=> Booting Puma 5=> Rails 6.0.2.1 application starting in development 6=> Run `rails server --help` for more startup options 7Puma starting in single mode... 8* Version 4.3.3 (ruby 2.6.5-p114), codename: Mysterious Traveller 9* Min threads: 5, max threads: 5 10* Environment: development 11* Listening on tcp://127.0.0.1:3000 12Use Ctrl-C to stop

127.0.0.1:30000.0.0.0:3000にアクセス→結果は変わらず

##環境
macOS X Mojave 10.14.5
Docker Desktop 2.1.0.4
Visual Studio Code 1.43.0
Remote - Containers 0.107.0
Ruby 2.6.5
Rails 6.0.2

##ファイル

yml

1#/docker-compose.yml 2version: '3' 3services: 4 db: 5 image: postgres 6 volumes: 7 - psgl_data:/var/lib/postgresql/data 8 environment: 9 POSTGRES_USER: root 10 POSTGRES_PASSWORD: password 11 ports: 12 - 5433:5432 13 web: 14 build: 15 context: . 16 dockerfile: Dockerfile 17 command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 18 tty: true 19 stdin_open: true 20 depends_on: 21 - db 22 ports: 23 - "3000:3000" 24 volumes: 25 - .:/app_name 26volumes: 27 psgl_data:

Dockerfile

1#/Dockerfile 2FROM ruby:2.6.5 3 4RUN apt-get update -qq && apt-get install -y nodejs postgresql-client 5RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 6curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 7echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 8apt-get update && apt-get install -y yarn 9 10RUN mkdir /app_name 11ENV APP_ROOT /app_name 12WORKDIR $APP_ROOT 13 14ADD ./Gemfile $APP_ROOT/Gemfile 15ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock 16 17RUN gem install bundler 18RUN bundle install 19ADD . $APP_ROOT

yml

1#/.devcontainer/docker-compose.yml 2version: '3' 3services: 4 web: 5 volumes: 6 - .:/workspace:cached 7 command: /bin/sh -c "while sleep 1000; do :; done"

json

1//.devcontainer/devcontainer.json 2{ 3 "name": "Existing Docker Compose (Extend)", 4 "dockerComposeFile": [ 5 "../docker-compose.yml", 6 "docker-compose.yml" 7 ], 8 "service": "web", 9 "workspaceFolder": "/workspace", 10 11 "settings": { 12 "terminal.integrated.shell.linux": null 13 }, 14 15 "extensions": [] 16} 17

他に必要な情報がございましたらご指摘ください。
よろしくお願いいたします。

s.k👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

あー、そういうことですか。自分はそういう形で使ってなかったので、。
それなら
/.devcontainer/docker-compose.yml
がもとのcommandを上書きしてしまっているのが原因なので、
こちらのcommandを編集すれば大丈夫です。

このcommandでは無限ループさせて、rails sがエラーで立ち上がらなかった際にもコンテナを起動させたままにするのが意図だと思うので長くなりますが、その前に追加する形で

yml

1command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0' ; while sleep 1000; do :; done"

とすればうまくいくかと
それかエントリポイントに分けてかくために
DockerfileにENTRYPOINT ["entrypoint.sh"]を追加して、
entrypoint.shを作成して

#!/bin/sh set -e rm -f /app_name/tmp/pids/server.pid exec "$@"

とすれば、ここに書いたrm部分は省略できます。

投稿2020/03/12 13:15

編集2020/03/12 13:20
ozroro

総合スコア97

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

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

d0ne1s

2020/03/13 00:18

できました! 具体的なコマンドまで教えていただきありがとうございます。 すごく助かりました???? まだまだわからない事だらけなので、もっと勉強していこうと思います!
guest

0

試したことの2つ目の

rm /workspace/tmp/pids/server.pid

の後に1つ目でやってるようにIPを指定してみてください

bin/rails s -b 0.0.0.0

bin/rails sはデフォルトで127.0.0.1をlistenしますが、これは0.0.0.0と同じではありません。
詳しくはこちらの記事などを参照してください
rails s -b 0.0.0.0 のオプション-bの意味
vscodeは関係ないと思います。

投稿2020/03/12 04:54

ozroro

総合スコア97

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

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

d0ne1s

2020/03/12 08:54

アクセスできました!ありがとうございます! できれば、毎回起動するたびに `rm /workspace/tmp/pids/server.pid` `bin/rails s -b 0.0.0.0` とするのは手間なので、初めからアクセスできる状態でサーバーを起動させたいのですが、 その場合`/.devcontainer/docker-compose.yml`の方にcommandを書いていく形になるのでしょうか。 それとも`/docker-compose.yml`内の既存のコメントを修正する形でしょうか。 重ねての質問となってしまい恐縮ですが、ご教授いただけますと助かります。
d0ne1s

2020/03/12 09:01

現状、vscodeのremote decelopmentを噛ませずに普通にdocker-compose up -dで起動した場合には、特に.pidの削除なしで0.0.0.0:3000にアクセスできている状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問