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

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

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

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

Q&A

解決済

1回答

972閲覧

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

WatanabeJin

総合スコア44

Docker

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

0グッド

0クリップ

投稿2022/03/15 11:16

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

pod.yml

1apiVersion: v1 2kind: Pod 3metadata: 4 name: rails 5 labels: 6 app: rails 7spec: 8 containers: 9 - name: rails 10 image: [アカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/rails:1.0.0 11 ports: 12 - containerPort: 3000 13 env: 14 - name: DB_USERNAME 15 value: root 16 - name: DB_PASSWORD 17 value: password 18 - name: DB_DATABASE 19 value: myapp 20 - name: DB_HOST 21 value: db 22 volumeMounts: 23 - name: public-data 24 mountPath: /myapp/public 25 - name: tmp-data 26 mountPath: /myapp/tmp/sockets 27 28 - name: nginx 29 image: [アカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest 30 ports: 31 - containerPort: 80 32 volumeMounts: 33 - name: public-data 34 mountPath: /myapp/public 35 - name: tmp-data 36 mountPath: /myapp/tmp/sockets 37 38 volumes: 39 - name: public-data 40 emptyDir: {} 41 - name: tmp-data 42 emptyDir: {}

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

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

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

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

Dockerfile

1FROM ruby:alpine3.13 as Base 2 3ARG UID 4 5RUN adduser -D app -u ${UID:-1000} && \ 6 apk update \ 7 && apk add --no-cache gcc make libc-dev g++ mariadb-dev tzdata nodejs~=14 yarn 8 9WORKDIR /myapp 10COPY Gemfile . 11COPY Gemfile.lock . 12COPY package.json . 13COPY yarn.lock . 14 15RUN bundle install --jobs=4 16 17COPY entrypoint.sh /usr/bin/ 18RUN chmod +x /usr/bin/entrypoint.sh 19ENTRYPOINT ["entrypoint.sh"] 20 21# Development 22FROM base as development 23 24RUN yarn install 25COPY --chown=app:app . /myapp 26 27USER app 28RUN mkdir -p tmp/sockets tmp/pids 29 30EXPOSE 3000 31CMD ["sh", "-c", "./bin/webpack && bundle exec rails s -p 3000 -b '0.0.0.0'"] 32 33# build 34FROM base as build 35 36RUN mkdir -p tmp/sockets tmp/pids 37COPY . /myapp 38RUN yarn install 39 40# compile 41FROM build as compile 42 43ENV NODE_ENV=production 44RUN ./bin/webpack 45 46# production 47FROM compile as production 48 49ENV RAILS_ENV=production 50VOLUME /myapp/public 51VOLUME /myapp/tmp 52 53CMD /bin/sh -c "bundle exec puma -C config/puma.rb"

Dockerfile(Nginx)

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

docker

1version: "3.7" 2services: 3 rails: 4 build: 5 context: . 6 target: production 7 container_name: rails 8 volumes: 9 - .:/myapp 10 - public-data:/myapp/public 11 - tmp-data:/myapp/tmp/sockets 12 - log-data:/myapp/log 13 - /myapp/node_modules 14 env_file: 15 - .env 16 depends_on: 17 - db 18 environment: 19 DB_HOST: db 20 DB_USERNAME: root 21 22 db: 23 image: mysql:8.0.27 24 container_name: db 25 environment: 26 TZ: Asia/Tokyo 27 MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} 28 ports: 29 - "3306:3306" 30 volumes: 31 - db:/var/lib/mysql 32 33 web: 34 build: 35 context: containers/nginx 36 container_name: nginx 37 volumes: 38 - public-data:/myapp/public 39 - tmp-data:/myapp/tmp/sockets 40 ports: 41 - 80:80 42 depends_on: 43 - rails 44 45volumes: 46 db: 47 driver: local 48 public-data: 49 tmp-data: 50 log-data:

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

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

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

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

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

guest

回答1

0

自己解決

https://stackoverflow.com/questions/65471145/sharing-non-persistent-volume-between-containers-in-a-pod

こちらの記事を参考にinitContainserを設定することで解決しました。
やはりマウントすると空のディレクトリがマウントされてしまうようなのでDockerとは仕様が違うようです。

投稿2022/03/16 03:12

WatanabeJin

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問