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

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

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

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

Ruby on Rails 6

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

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

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

解決済

1回答

545閲覧

【Circleci】Circleciでdockerをビルドした時、ホストディレクトリがdockerコンテナ内にマウントされない問題を解決したい。

taba.3011

総合スコア12

docker-compose

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

Ruby on Rails 6

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

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

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

0クリップ

投稿2023/05/27 17:21

編集2023/05/28 14:22

前提

Circleciでdockerをビルドしています。
しかし.circleci/config.ymlファイル内で設定したワーキングディレクトリの内容がdocker-compose buildした際にマウントされず困っています。

発生している問題・エラーメッセージ

.circleci/config.yml内で以下のコマンドを実行する際、ホストディレクトリがマウントされていないので、エラーが出てしまいます。

yml

1- run: 2 name: Build and test 3 command: | 4 docker-compose build --quiet --no-cache 5 docker-compose run web bash -c "ls && bundle exec rails db:create"
^@^@Could not locate Gemfile or .bundle/ directory

該当のソースコード

.circleci/config.yml

yml

1version: 2.1 2 3orbs: 4 ruby: circleci/ruby@2.0.1 5 node: circleci/node@5.1.0 6 7# このプロジェクトで実行するジョブの定義 8jobs: 9 build-and-test: 10 docker: 11 - image: cimg/ruby:3.2.1-browsers 12 environment: 13 MYSQL_ROOT_HOST: db 14 MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} 15 - image: circleci/mysql:5.7 16 working_directory: ~/repo 17 steps: 18 - checkout 19 - setup_remote_docker 20 - restore_cache: 21 keys: 22 - v1-dependencies-{{ checksum "Gemfile.lock" }} 23 - v1-dependencies-{{ checksum "yarn.lock" }} 24 - v1-dependencies- 25 - run: 26 name: Bundle install 27 command: | 28 bundle install --path ./vendor/bundle 29 - save_cache: 30 paths: 31 - ./vendor/bundle 32 key: v1-dependencies-{{ checksum "Gemfile.lock" }} 33 - run: 34 name: Build and test 35 command: | 36 docker-compose build --quiet --no-cache 37 38                      #この部分でエラーが発生 39 docker-compose run web bundle exec rails db:create 40 docker-compose run web bundle exec rails db:migrate 41 docker-compose run web yarn install --check-files 42 docker-compose run web bundle exec rails webpacker:compile 43 docker-compose run web bundle exec rspec 44 - save_cache: 45 paths: 46 - ./node_modules 47 key: v1-dependencies-{{ checksum "yarn.lock" }} 48 49workflows: 50 build-and-test: 51 jobs: 52 - build-and-test 53

Dockerfile

FROM ruby:3.2.1 ENV LANG=ja_JP.UTF-8 ENV TZ=Asia/Tokyo ENV APP_ROOT /myapp #node.js,apt-transport-https,wgetをインストール RUN apt-get update -qq && apt-get install -y nodejs npm \ && npm install --global yarn RUN apt-get clean RUN rm -rf /var/lib/apt/lists/* WORKDIR $APP_ROOT ADD Gemfile $APP_ROOT ADD Gemfile.lock $APP_ROOT RUN \ gem install bundler:2.4.8 && \ bundle install && \ rm -rf ~/.gem COPY . $APP_ROOT RUN yarn install --check-files RUN bundle exec rails webpacker:compile COPY ./entrypoint.sh /usr/bin RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml

yml

1version: '3' 2 3services: 4 db: 5 image: mysql:5.7 6 volumes: 7 - to_do_app_data:/var/lib/mysql 8 environment: 9 MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}" 10 ports: 11 - 3306:3306 12 web: 13 container_name: to_do_app 14 build: . 15 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 16 volumes: 17 - .:/myapp 18 ports: 19 - "3000:3000" 20 depends_on: 21 - db 22volumes: 23 to_do_app_data: 24

config/database.yml

yml

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: <%= ENV['DB_PASSWORD'] %> 7 host: db

.env

DB_PASSWORD=password

試したこと

・ブラウザのCircleciのEnvironment ValiablesにはDB_PASSSWORDを設定しています。
・ローカル環境では.circleci/config.ymlファイル内の以下のコマンドは正常に実行できました。

docker-compose run web bundle exec rails db:create

こちらの記事に、ホストボリュームを使用していることが問題とあったのですが、どのように修正したら良いのかが分かりませんでした。

・デバッグでファイルの存在を検証しました。

- run: name: Build and test command: | pwd ls docker-compose build --quiet docker-compose run web bash -c "ls" #ファイルが存在しなかった。 docker-compose run web bundle exec rails db:create

結果

/home/circleci/repo app Dockerfile package-lock.json tmp babel.config.js entrypoint.sh postcss.config.js to_do.dio bin Gemfile public vendor config Gemfile.lock Rakefile yarn.lock config.ru lib README.md db log spec docker-compose.yml package.json storage

どなたか分かる方がいらっしゃいましたら、教えていただけると嬉しいです。

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

ruby 3.2.1
rails 6.1.7.3

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

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

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

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

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

guest

回答1

0

自己解決

docker-composeファイル内のvolumesを変更したら上手くいきました。

yml

1web: 2 container_name: to_do_app 3 build: . 4 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 5 volumes: 6 - .:/myapp #変更前 7 - .:/src/myapp   #変更後 8 ports: 9 - "3000:3000" 10 depends_on: 11 - db

投稿2023/05/28 05:22

taba.3011

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問