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

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

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

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

解決済

Kubernetesのボリュームを設定すると空になってしまう

WatanabeJin
WatanabeJin

総合スコア44

Docker

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

1回答

0評価

0クリップ

239閲覧

投稿2022/03/15 11:16

RailsとNginxを以下のファイルでポッドを起動しています。

pod.yml

apiVersion: v1 kind: Pod metadata: name: rails labels: app: rails spec: containers: - name: rails image: [アカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/rails:1.0.0 ports: - containerPort: 3000 env: - name: DB_USERNAME value: root - name: DB_PASSWORD value: password - name: DB_DATABASE value: myapp - name: DB_HOST value: db volumeMounts: - name: public-data mountPath: /myapp/public - name: tmp-data mountPath: /myapp/tmp/sockets - name: nginx image: [アカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest ports: - containerPort: 80 volumeMounts: - name: public-data mountPath: /myapp/public - name: tmp-data mountPath: /myapp/tmp/sockets volumes: - name: public-data emptyDir: {} - name: tmp-data emptyDir: {}

ここでボリュームpublic-dataを設定しています。
Railsコンテナのmyapp/publicにはファイルがあり、そのファイルをNginxに共有したいです。
しかし、この設定で起動するとRailsのコンテナ、Nginxのコンテナともにmyapp/publicの中は空になります。

myapp/tmp/socketについては、コンテナ起動後(ボリューム共有後)にファイルが作成されるためにうまく共有ができています。しかしこの共有をmyapp/tmpにするとうまくいかなくなります。

Dockerであればうまく共有できていたのでなぜできないのでしょうか。教えていただきたいです。

Dockerは以下で起動していました。

Dockerfile

FROM ruby:alpine3.13 as Base ARG UID RUN adduser -D app -u ${UID:-1000} && \ apk update \ && apk add --no-cache gcc make libc-dev g++ mariadb-dev tzdata nodejs~=14 yarn WORKDIR /myapp COPY Gemfile . COPY Gemfile.lock . COPY package.json . COPY yarn.lock . RUN bundle install --jobs=4 COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] # Development FROM base as development RUN yarn install COPY --chown=app:app . /myapp USER app RUN mkdir -p tmp/sockets tmp/pids EXPOSE 3000 CMD ["sh", "-c", "./bin/webpack && bundle exec rails s -p 3000 -b '0.0.0.0'"] # build FROM base as build RUN mkdir -p tmp/sockets tmp/pids COPY . /myapp RUN yarn install # compile FROM build as compile ENV NODE_ENV=production RUN ./bin/webpack # production FROM compile as production ENV RAILS_ENV=production VOLUME /myapp/public VOLUME /myapp/tmp CMD /bin/sh -c "bundle exec puma -C config/puma.rb"

Dockerfile(Nginx)

FROM nginx:alpine # インクルード用のディレクトリ内を削除 RUN rm -f /etc/nginx/conf.d/* # Nginxの設定ファイルをコンテナにコピー ADD nginx.conf /etc/nginx/conf.d/myapp.conf # docker buildのときは以下のコメントをはずす # ADD /containers/nginx/nginx.conf /etc/nginx/conf.d/myapp.conf RUN mkdir -p myapp RUN mkdir -p myapp/tmp RUN mkdir -p myapp/public # ビルド完了後にNginxを起動 CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

docker

version: "3.7" services: rails: build: context: . target: production container_name: rails volumes: - .:/myapp - public-data:/myapp/public - tmp-data:/myapp/tmp/sockets - log-data:/myapp/log - /myapp/node_modules env_file: - .env depends_on: - db environment: DB_HOST: db DB_USERNAME: root db: image: mysql:8.0.27 container_name: db environment: TZ: Asia/Tokyo MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} ports: - "3306:3306" volumes: - db:/var/lib/mysql web: build: context: containers/nginx container_name: nginx volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp/sockets ports: - 80:80 depends_on: - rails volumes: db: driver: local public-data: tmp-data: log-data:

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Docker

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