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:
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。