Сборка Rails не работает с помощью Docker.Nokogiri вызывает ошибку, когда я использую ruby: alpine image - PullRequest
0 голосов
/ 03 марта 2019

У меня голая Rails 5.x, которую я пытаюсь заставить работать с помощью Docker.

Я использую Google Cloud build для создания своего изображения.Когда я выполняю сборку докера на Ubuntu 18.x, он работает нормально.

Мой Dockerfile выглядит следующим образом:

FROM ruby:2.5-alpine

RUN apk update && apk --update add \
 build-base \
 nodejs \
 postgresql-dev \
 tzdata \
 imagemagick 

#RUN apt-get install -y build-essential

# yarn
ENV PATH=/root/.yarn/bin:$PATH
RUN apk add --virtual build-yarn curl && \
    touch ~/.bashrc && \
    curl -o- -L https://yarnpkg.com/install.sh | sh && \
    apk del build-yarn


RUN mkdir /app
WORKDIR /app

COPY Gemfile ./
RUN gem install bundler -v 2.0.1
RUN gem uninstall bundler --version '<2.0.0'
RUN gem install nokogiri -v '1.10.1' --source 'https://rubygems.org/'
RUN bundle install --binstubs

Когда я собираю образ Docker, я получаю эту ошибку:

Successfully installed mini_portile2-2.4.0 Building native extensions.
This could take a while... ERROR:  Error installing nokogiri:   ERROR:
Failed to build gem native extension.

    current directory: /usr/local/bundle/gems/nokogiri-1.10.1/ext/nokogiri
/usr/local/bin/ruby -I /usr/local/lib/ruby/site_ruby/2.5.0 -r
./siteconf20190303-1-7m260v.rb extconf.rb checking if the C compiler
accepts ... *** extconf.rb failed *** Could not create Makefile due to
some reason, probably lack of necessary libraries and/or headers. 
Check the mkmf.log file for more details.  You may need configuration
options.

Provided configuration options:     --with-opt-dir  --without-opt-dir
    --with-opt-include  --without-opt-include=${opt-dir}/include
    --with-opt-lib  --without-opt-lib=${opt-dir}/lib    --with-make-prog
    --without-make-prog     --srcdir=.  --curdir
    --ruby=/usr/local/bin/$(RUBY_BASE_NAME)     --help  --clean
/usr/local/lib/ruby/2.5.0/mkmf.rb:456:in `try_do': The compiler failed
to generate an executable file. (RuntimeError) You have to install
development tools first.    from
/usr/local/lib/ruby/2.5.0/mkmf.rb:574:in `block in try_compile'     from
/usr/local/lib/ruby/2.5.0/mkmf.rb:521:in `with_werror'  from
/usr/local/lib/ruby/2.5.0/mkmf.rb:574:in `try_compile'  from
extconf.rb:138:in `nokogiri_try_compile'    from extconf.rb:162:in
`block in add_cflags'   from /usr/local/lib/ruby/2.5.0/mkmf.rb:632:in
`with_cflags'   from extconf.rb:161:in `add_cflags'     from
extconf.rb:416:in `<main>'

To see why this extension failed to compile, please check the mkmf.log
which can be found here:


/usr/local/bundle/extensions/x86_64-linux/2.5.0/nokogiri-1.10.1/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in
/usr/local/bundle/gems/nokogiri-1.10.1 for inspection. Results logged
to
/usr/local/bundle/extensions/x86_64-linux/2.5.0/nokogiri-1.10.1/gem_make.out
The command '/bin/sh -c gem install nokogiri -v '1.10.1' --source
'https://rubygems.org/'' returned a non-zero code: 1 ERROR ERROR:
build step 0 "gcr.io/cloud-builders/docker" failed: exit status 1

Нужно ли использовать другой тип изображения, который поддерживает build-essential?Есть ли другой способ установки nokogiri?

Я в замешательстве, это проблема с Dockerfile или средой, которая создает образ докера, т.е. сборка облака Google?

1 Ответ

0 голосов
/ 05 марта 2019

Мой вывод из файла журнала сказал, что мне нужно gmp-dev.

Вот окончательный вывод моей конфигурации Docker Alpine, которая работала для моего случая:

RUN apk add --no-cache --update \
    build-base \
    linux-headers \
    git \
    postgresql-dev \
    nodejs \
    yarn \
    tzdata \
    graphviz \
    gmp-dev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...