Docker 与捆绑安装在我的 VPS 和 Mac 上表现不一样
Docker with bundle install doesn't behave same on my VPS and Mac
我的 Dockerfile
FROM ruby:2.6.3-alpine
ENV BUNDLER_VERSION=2.2.6
RUN apk add --update --no-cache \
binutils-gold \
build-base \
curl \
file \
g++ \
gcc \
git \
less \
libstdc++ \
libffi-dev \
libc-dev \
linux-headers \
libxml2-dev \
libxslt-dev \
libgcrypt-dev \
make \
netcat-openbsd \
nodejs \
openssl \
pkgconfig \
postgresql-dev \
python \
tzdata \
yarn
RUN gem install bundler -v 2.2.6
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle check || bundle install
COPY package.json yarn.lock ./
RUN yarn install --check-files
COPY . ./
ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]
docker-compose.yml
version: '3.4'
services:
app:
build:
context: .
dockerfile: Dockerfile
depends_on:
- database
- redis
ports:
- "3000:3000"
volumes:
- .:/app
- gem_cache:/usr/local/bundle/gems
- node_modules:/app/node_modules
env_file: .env
environment:
RAILS_ENV: development
database:
image: postgres:12.1
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
redis:
image: redis:5.0.7
sidekiq:
build:
context: .
dockerfile: Dockerfile
depends_on:
- app
- database
- redis
volumes:
- .:/app
- gem_cache:/usr/local/bundle/gems
- node_modules:/app/node_modules
env_file: .env
environment:
RAILS_ENV: development
entrypoint: ./entrypoints/sidekiq-entrypoint.sh
volumes:
gem_cache:
db_data:
node_modules:
构建后我的 Mac 一切正常
但是在我的 VPS 上,它没有按预期工作
它们基于完全相同的 Dockerfile 和 docker-compose.yml。
我知道我可以将工作正常的图像推送到 docker 中心并使用它,但我仍然想知道哪里出了问题?他们都是在Alpine环境下工作,应该不会有什么不同。
我已经挖掘了错误信息,然后我尝试了一些解决方法,但在遇到 sassc 时遇到了同样的包错误。
这是sassc的错误输出,试过不同版本还是不行。
但最后,他们都给我“无法构建 gem 本机扩展。”
这里有什么问题?为什么它在我的 Mac 中工作正常,但在我的 VPS(Ubuntu) 中工作正常?我被困在这里
内存不够我编译。问题已解决。
我的 VPS 上只有 1g1c,而我 运行 一个 Nginx 和 sidekiq。通常情况下,内存只有 600m 左右。简单的 mem 不足以编译和构建。
我的 Dockerfile
FROM ruby:2.6.3-alpine
ENV BUNDLER_VERSION=2.2.6
RUN apk add --update --no-cache \
binutils-gold \
build-base \
curl \
file \
g++ \
gcc \
git \
less \
libstdc++ \
libffi-dev \
libc-dev \
linux-headers \
libxml2-dev \
libxslt-dev \
libgcrypt-dev \
make \
netcat-openbsd \
nodejs \
openssl \
pkgconfig \
postgresql-dev \
python \
tzdata \
yarn
RUN gem install bundler -v 2.2.6
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle check || bundle install
COPY package.json yarn.lock ./
RUN yarn install --check-files
COPY . ./
ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]
docker-compose.yml
version: '3.4'
services:
app:
build:
context: .
dockerfile: Dockerfile
depends_on:
- database
- redis
ports:
- "3000:3000"
volumes:
- .:/app
- gem_cache:/usr/local/bundle/gems
- node_modules:/app/node_modules
env_file: .env
environment:
RAILS_ENV: development
database:
image: postgres:12.1
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
redis:
image: redis:5.0.7
sidekiq:
build:
context: .
dockerfile: Dockerfile
depends_on:
- app
- database
- redis
volumes:
- .:/app
- gem_cache:/usr/local/bundle/gems
- node_modules:/app/node_modules
env_file: .env
environment:
RAILS_ENV: development
entrypoint: ./entrypoints/sidekiq-entrypoint.sh
volumes:
gem_cache:
db_data:
node_modules:
构建后我的 Mac 一切正常
但是在我的 VPS 上,它没有按预期工作
它们基于完全相同的 Dockerfile 和 docker-compose.yml。
我知道我可以将工作正常的图像推送到 docker 中心并使用它,但我仍然想知道哪里出了问题?他们都是在Alpine环境下工作,应该不会有什么不同。
我已经挖掘了错误信息,然后我尝试了一些解决方法,但在遇到 sassc 时遇到了同样的包错误。
这是sassc的错误输出,试过不同版本还是不行。
但最后,他们都给我“无法构建 gem 本机扩展。”
这里有什么问题?为什么它在我的 Mac 中工作正常,但在我的 VPS(Ubuntu) 中工作正常?我被困在这里
内存不够我编译。问题已解决。
我的 VPS 上只有 1g1c,而我 运行 一个 Nginx 和 sidekiq。通常情况下,内存只有 600m 左右。简单的 mem 不足以编译和构建。