2022/08/26 04:30
123
投稿2022/08/26 04:22
編集2022/08/26 04:23この問題を解決するためにDockerのディレクトリ構造をある程度理解し、socketsフォルダのパスを合わせたいです。
docker
1FROM ruby:3.1.2-buster 2 3RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs default-mysql-client 4 5# ENV RAILS_ENV=production 6 7ENV APP_PATH /myapp 8 9RUN mkdir $APP_PATH 10WORKDIR $APP_PATH 11 12COPY Gemfile $APP_PATH/Gemfile 13COPY Gemfile.lock $APP_PATH/Gemfile.lock 14RUN bundle install 15 16COPY . $APP_PATH 17 18# Add a script to be executed every time the container starts. 19COPY entrypoint.sh /usr/bin/ 20RUN chmod +x /usr/bin/entrypoint.sh 21ENTRYPOINT ["entrypoint.sh"] 22EXPOSE 3000 23 24# Start the main process. 25RUN mkdir -p tmp/sockets 26RUN mkdir -p tmp/pids 27 28CMD ["rails", "server", "-b", "0.0.0.0"]
j
1# プロキシ先の指定 2# Nginxが受け取ったリクエストをバックエンドのpumaに送信 3upstream myapp { 4 # ソケット通信したいのでpuma.sockを指定 5 # server unix:/backend/tmp/sockets/puma.sock; 6 server unix:/myapp/tmp/sockets/puma.sock; 7 # server unix:///myapp/tmp/sockets/puma.sock; 8} 9 10server { 11 listen 80; 12 # ドメインもしくはIPを指定 13 server_name localhost; 14 # server_name .*; 15 16 access_log /var/log/nginx/access.log; 17 error_log /var/log/nginx/error.log; 18 19 # ドキュメントルートの指定 20 root /myapp/public; 21 22 client_max_body_size 100m; 23 error_page 404 /404.html; 24 error_page 505 502 503 504 /500.html; 25 try_files $uri/index.html $uri @myapp; 26 keepalive_timeout 5; 27 28 # リバースプロキシ関連の設定 29 location @myapp { 30 proxy_set_header X-Real-IP $remote_addr; 31 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 32 proxy_set_header Host $http_host; 33 proxy_pass http://myapp; 34 } 35}
現在以下の
yml
1connect() to unix:/myapp/backend/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, 2# パスを2つためしました 3connect() 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
1myapp-backend(このような感じであとは写真と同じ) 2 |-frontend 3 |-docker-compose.production.yml 4
このような構造になっていると予想したのですが、どうやら違うようです。
また、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
1# Nginxの設定ファイルをコンテナにコピー 2ADD nginx.conf /etc/nginx/conf.d/myapp.conf
・初心者なので的外れな理解をしているかもしれませんが、なにかしらアドバイスがあればよろしくお願いいたします。不備があれば追記いたします。
回答2件