前提
こちらの記事を参考にディレクトリ構造を書き換えて、docker comopse upしたところ、全てのライブラリでインポートエラーが出てしまいました。ですが、コンポーネントをインポートする際にはエラーが出ていないので、恐らくですが、package.jsonが何らかの理由で読み込まれていないことが原因かと予想していますが、どうすれば対処できるのか分かりません。
ディレクトリ構造
Dockerfile(Rails)
Docker
1FROM ruby:3.1.2-buster 2 3RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 4 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 5 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 6 apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs default-mysql-client yarn 7 8ENV APP_PATH /myapp 9 10RUN mkdir $APP_PATH 11WORKDIR $APP_PATH 12 13COPY Gemfile $APP_PATH/Gemfile 14COPY Gemfile.lock $APP_PATH/Gemfile.lock 15 16RUN bundle config set force_ruby_platform true 17 18RUN gem install bundler 19RUN bundle install 20 21VOLUME /tmp 22# Add a script to be executed every time the container starts. 23COPY entrypoint.sh /usr/bin/ 24RUN chmod +x /usr/bin/entrypoint.sh 25ENTRYPOINT ["entrypoint.sh"] 26CMD ["rails", "server"] 27
Dockerfile(frontend nginx)
Docker
1FROM node:16-alpine as build 2WORKDIR /home/node/app 3COPY ./app /home/node/app 4RUN yarn 5RUN yarn run build 6 7FROM nginx:alpine 8RUN rm -f /etc/nginx/conf.d/* 9COPY --from=build /home/node/app/build /var/www 10ADD ./nginx.conf /etc/nginx/conf.d/ 11CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
docker-compose.production.yml
yml
1version: '3.3' 2 3services: 4 db: 5 image: mysql:8.0 6 environment: 7 MYSQL_ROOT_PASSWORD: password 8 ports: 9 - '3306:3306' 10 command: --default-authentication-plugin=mysql_native_password 11 volumes: 12 - db-data:/var/lib/mysql 13 api: 14 build: 15 context: ./backend/ 16 dockerfile: Dockerfile 17 volumes: 18 - ./backend:/myapp 19 - bundle:/usr/local/bundle 20 depends_on: 21 - db 22 frontend: 23 build: 24 context: ./backend/frontend/ 25 dockerfile: Dockerfile 26 ports: 27 - "3000:80" 28 volumes_from: 29 - api 30 depends_on: 31 - api 32 33volumes: 34 db-data: 35 bundle:
nginx.conf
j
1upstream api { 2 server unix:/myapp/tmp/sockets/puma.sock; 3} 4server { 5 listen 80; 6 server_name localhost:3000; 7 charset utf-8; 8 9 root /var/www/; 10 index index.html index.htm; 11 12 location / { 13 try_files $uri /index.html; 14 } 15 16 location /api/v1 { 17 proxy_set_header X-Real-IP $remote_addr; 18 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 19 proxy_set_header Host $http_host; 20 proxy_pass http://api; 21 } 22 23 error_page 500 502 503 504 /500.html; 24 client_max_body_size 4G; 25 keepalive_timeout 10; 26 27}
package.json
json
1{ 2 "name": "app", 3 "version": "0.1.0", 4 "private": true, 5 "dependencies": { 6 "@emotion/react": "^11.10.0", 7 "@emotion/styled": "^11.10.0", 8 "@material-ui/core": "^4.12.4", 9 "@material-ui/icons": "^4.11.3", 10 "@material-ui/lab": "^4.0.0-alpha.61", 11 "@material-ui/styled-engine": "^5.0.0-alpha.11", 12 "@mui/icons-material": "^5.8.4", 13 "@mui/material": "^5.10.0", 14 "@mui/styles": "^5.9.3", 15 "@testing-library/jest-dom": "^5.14.1", 16 "@testing-library/react": "^13.0.0", 17 "@testing-library/user-event": "^13.2.1", 18 "@types/axios": "^0.14.0", 19 "@types/jest": "^28.1.7", 20 "@types/js-cookie": "^3.0.2", 21 "@types/node": "^16.7.13", 22 "@types/react": "^18.0.0", 23 "@types/react-dom": "^18.0.0", 24 "@types/react-router-dom": "^5.3.3", 25 "@types/styled-components": "^5.1.26", 26 "@types/wavesurfer.js": "^6.0.3", 27 "add": "^2.0.6", 28 "axios": "^0.27.2", 29 "axios-case-converter": "^0.9.0", 30 "intro.js": "^6.0.0", 31 "intro.js-react": "^0.6.0", 32 "js-cookie": "^3.0.1", 33 "react": "^18.2.0", 34 "react-dom": "^18.2.0", 35 "react-router-dom": "^6.3.0", 36 "react-scripts": "5.0.1", 37 "react-select": "^5.4.0", 38 "rooks": "^6.4.2", 39 "styled-components": "^5.3.5", 40 "typescript": "^4.4.2", 41 "wavesurfer.js": "^6.2.0", 42 "web-vitals": "^2.1.0", 43 "yarn": "^1.22.19" 44 }, 45 "scripts": { 46 "start": "react-scripts start", 47 "build": "react-scripts build", 48 "test": "jest", 49 "eject": "react-scripts eject" 50 }, 51 "eslintConfig": { 52 "extends": [ 53 "react-app", 54 "react-app/jest" 55 ] 56 }, 57 "browserslist": { 58 "production": [ 59 ">0.2%", 60 "not dead", 61 "not op_mini all" 62 ], 63 "development": [ 64 "last 1 chrome version", 65 "last 1 firefox version", 66 "last 1 safari version" 67 ] 68 }, 69 "devDependencies": { 70 "@babel/core": "^7.18.10", 71 "@babel/preset-env": "^7.18.10", 72 "@babel/preset-typescript": "^7.18.6", 73 "babel-jest": "^28.1.3", 74 "jest": "^28.1.3", 75 "jest-environment-jsdom": "^28.1.3", 76 "ts-jest": "^28.0.8" 77 } 78} 79
考察など
・package.jsonにインポートするライブラリは入っています。
・ディレクトリ構造を書き換える前(nginxを使っておらず、backend frontendが同じディレクトリに存在していた時)
・検索すると、コンポーネントのエラーについてはヒットするが、ライブラリのインポートについてのエラーで参加になりそうなものはまだ見つけられていない
・開発環境で起こっている(*本番環境もこれでデプロイ)
・何かしらアドバイスがあればよろしくお願いいたします。不備があれば追記いたします。
追記
今気づきましたが、node_moduleがないみたいです。なのでインストールしようと思ったのですが、
$ docker compose -f docker-compose.production.yml exec frontend yarn OCI runtime exec failed: exec failed: unable to start container process: exec: "yarn": executable file not found in $PATH: unknown
このようなエラーが出てしまいました。現在デバッグ中です
回答2件
あなたの回答
tips
プレビュー