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:
まだ回答がついていません
会員登録して回答してみよう