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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Docker

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

解決済

Dockerコンテナ内のディレクトリ構造はローカル環境(VSCode上)のディレクトリ構造とどう違うのか。

senseIY
senseIY

総合スコア277

Docker

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

2回答

0リアクション

0クリップ

457閲覧

投稿2022/08/26 04:22

編集2022/08/26 04:23

前提

この問題を解決するためにDockerのディレクトリ構造をある程度理解し、socketsフォルダのパスを合わせたいです。

Dockerfile(backend)

docker

FROM ruby:3.1.2-buster RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs default-mysql-client # ENV RAILS_ENV=production ENV APP_PATH /myapp RUN mkdir $APP_PATH WORKDIR $APP_PATH COPY Gemfile $APP_PATH/Gemfile COPY Gemfile.lock $APP_PATH/Gemfile.lock RUN bundle install COPY . $APP_PATH # Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 # Start the main process. RUN mkdir -p tmp/sockets RUN mkdir -p tmp/pids CMD ["rails", "server", "-b", "0.0.0.0"]

nginx.conf

j

# プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream myapp { # ソケット通信したいのでpuma.sockを指定 # server unix:/backend/tmp/sockets/puma.sock; server unix:/myapp/tmp/sockets/puma.sock; # server unix:///myapp/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 server_name localhost; # server_name .*; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ドキュメントルートの指定 root /myapp/public; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; try_files $uri/index.html $uri @myapp; keepalive_timeout 5; # リバースプロキシ関連の設定 location @myapp { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://myapp; } }

イメージ説明
イメージ説明

自身の考察など

現在以下の

yml

connect() to unix:/myapp/backend/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, # パスを2つためしました connect() to unix:/myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, c

nginxコンテナがpuma.sockファイルを見つけられないというエラーが発生しています。
どうやら指定したパスが間違っているようです。

私は最初Dockerコンテナの中でパスを指定する場合、「COPY . $APP_PATH」とrails側のDockerfileにあるので、

txt

myapp-backend(このような感じであとは写真と同じ) |-frontend |-docker-compose.production.yml

このような構造になっていると予想したのですが、どうやら違うようです。
また、railsコンテナの中のpumaは

api_1 | * Listening on unix:/myapp/tmp/sockets/puma.sock

とあるので、/myapp/tmp/sockets/puma.sockこのファイルを見つけていますが、nginxコンテナはこのパスだとpuma.sockを見つけられないようです。いろいろ検索すると、この記事にたどり着きました。どうやら「Dockerイメージは一つのファイルではなく概念。抽象的なイメージ・レイヤの積み重ね」のようです。しかし、私はDocker初心者のため何を言っているのか理解することができませんでした。この部分もそうなのですが、etcフォルダというものは自身のVSCode上にないため、dockerコンテナの中のディレクトリ構造にあると思われます。ですが、この場合myappから始まっていないので、どうすればpuma.sockのパスを指定できるかわかりません。

docker

# Nginxの設定ファイルをコンテナにコピー ADD nginx.conf /etc/nginx/conf.d/myapp.conf

・初心者なので的外れな理解をしているかもしれませんが、なにかしらアドバイスがあればよろしくお願いいたします。不備があれば追記いたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Matsumon0104

2022/08/26 05:02

別の質問にも紐づいているようで、質問内容が理解できていませんが、タイトル部の「Dockerコンテナ内のディレクトリ構造はローカル環境(VSCode上)のディレクトリ構造とどう違うのか。」については、 別物と考えた方がいいです。 Dockerのコンテナはコンテナとして動作しているOSにディレクトリ構造は依存します。 なので、ローカル(といっている)ディレクトリ構造とDockerのコンテナ(ここではnginxの公式イメージから作成したコンテナ?)はOSを合わせれば全く同じに作ることもできますが、基本的にはそんな作り方はしないです。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Docker

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