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

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

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

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

SPA(Single-page Application)

SPA(Single-page Application)は、単一のWebページのみでコンテンツの切り替えができるWebアプリケーションもしくはWebサイトです。ブラウザでのページ遷移がないため、デスクトップアプリケーションのようなUXを提供します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Docker

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

Q&A

解決済

1回答

808閲覧

docker-compose.ymlのvolumesによるclientのバインドマウントのみうまく動かない

Utsubo

総合スコア15

docker-compose

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

SPA(Single-page Application)

SPA(Single-page Application)は、単一のWebページのみでコンテンツの切り替えができるWebアプリケーションもしくはWebサイトです。ブラウザでのページ遷移がないため、デスクトップアプリケーションのようなUXを提供します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Docker

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

0グッド

0クリップ

投稿2022/12/07 04:01

前提

SPA構成でポートフォリオ作成をしています。
api (rails7), nginx, db (postgres)のDocker環境は作成済みで、Railsアプリの開発を進めており、そこにclient (React)環境を追加しようとDockerfileを作成し、docker-compose.ymlにも設定を追加しました。

docker-compose logで確認したところ、エラーは発生しておりません。また、clientのコンテナに入り、node -vを確認したところ、v18.12.1と正常にバージョンが表示されております。
ファイル構成と内容は以下のようになっております。

Sample_app ├── api │ ├── Dockerfile │ └── その他Railsアプリファイル等 ├── client/ (ここを追加) │ └── Dockerfile (ここを追加) ├── nginx/ │ └── nginxファイル等 ├── docker-compose.yml └── その他ファイル

client/Dockerfile

FROM node:18.12.1 WORKDIR /usr/src/app

docker-compose.yml

version: "3.9" services: db: image: postgres:15.1 volumes: - db_1:/var/lib/postgresql/data environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} api: build: context: ./api dockerfile: Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - "3000:3000" volumes: - ./api:/myapp - ./nginx:/myapp/nginx environment: DATABASE_PASSWORD: ${DATABASE_PASSWORD} tty: true stdin_open: true depends_on: - db nginx: image: nginx:1.23.2 ports: - "80:80" command: [nginx-debug, '-g', 'daemon off;'] volumes: - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - ./nginx/html/swagger-ui:/usr/share/nginx/html/swagger-ui depends_on: - api client: build: context: ./client dockerfile: Dockerfile ports: - "3001:3001" volumes: - ./client:/usr/src/app tty: true stdin_open: true volumes: db_1:

実現したいこと

/clientにあるファイル・ディレクトリをclientコンテナ内のusr/src/appにバインドマウントしたいです。

エラーメッセージ

なし

試したこと

  • 別の新規のディレクトリを作成し、以下のようなフォルダ構成でclinetのみ環境構築した結果、バインドマウントできました
Another_sample_app ├── client/ │ └── Dockerfile └── docker-compose.yml

client/Dockerfile

FROM node:18.12.1 WORKDIR /usr/src/app

docker-compose.yml

version: "3.9" services: client: build: context: ./client dockerfile: Dockerfile ports: - "3001:3001" volumes: - ./client:/usr/src/app tty: true stdin_open: true
  • 上記の結果より、可能性は低そうでうすがclientの順番が問題かと思い、元のアプリのdocker-compose.ymlの記述を以下のように入れ替え、clientを一番上に持ってきたが、正常にバインドマウントできませんでした
version: "3.9" services: client: build: context: ./client dockerfile: Dockerfile ports: - "3001:3001" volumes: - ./client:/usr/src/app tty: true stdin_open: true db: image: postgres:15.1 volumes: - db_1:/var/lib/postgresql/data environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} api: build: context: ./api dockerfile: Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - "3000:3000" volumes: - ./api:/myapp - ./nginx:/myapp/nginx environment: DATABASE_PASSWORD: ${DATABASE_PASSWORD} tty: true stdin_open: true depends_on: - db nginx: image: nginx:1.23.2 ports: - "80:80" command: [nginx-debug, '-g', 'daemon off;'] volumes: - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - ./nginx/html/swagger-ui:/usr/share/nginx/html/swagger-ui depends_on: - api volumes: db_1:
  • volumesの記法を下記のようにshort syntaxからlong syntaxに変更したが同様にエラーは発生せず、バインドマウントできませんでした
version: "3.9" services: db: image: postgres:15.1 volumes: - db_1:/var/lib/postgresql/data environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} api: build: context: ./api dockerfile: Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - "3000:3000" volumes: - ./api:/myapp - ./nginx:/myapp/nginx environment: DATABASE_PASSWORD: ${DATABASE_PASSWORD} tty: true stdin_open: true depends_on: - db nginx: image: nginx:1.23.2 ports: - "80:80" command: [nginx-debug, '-g', 'daemon off;'] volumes: - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - ./nginx/html/swagger-ui:/usr/share/nginx/html/swagger-ui depends_on: - api client: build: context: ./client dockerfile: Dockerfile ports: - "3001:3001" volumes: - type: bind source: "./client" target: "/usr/src/app" tty: true stdin_open: true volumes: db_1:
  • 一度全てのimagesを削除し、再度ビルドしたが同様にバインドマウントできませんでした

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

OS: macOS Big Sur Version 11.4 (intel processor)
Docker: Docker version 20.10.21
docker-compose: Docker Compose version v2.13.0

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

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

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

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

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

guest

回答1

0

自己解決

下記の解答を参考にさせていただきDocker Desktopを再起動したところ、正常にバインドマウントできました。
https://teratail.com/questions/m8kg4m4loxwvra

投稿2022/12/07 04:18

Utsubo

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問