Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';在Alpine Linux上不需要ruby gsl_Ruby_Docker_Gsl_Alpine - Fatal编程技术网

Can';在Alpine Linux上不需要ruby gsl

Can';在Alpine Linux上不需要ruby gsl,ruby,docker,gsl,alpine,Ruby,Docker,Gsl,Alpine,我在docker映像中运行alpine并运行ruby代码。这将成功安装所有软件包,但在尝试要求gsl时失败 以下是Dockerfile: FROM alpine:3.4 RUN apk upgrade --update \ && apk add libatomic readline readline-dev libxml2 libxml2-dev \ libxslt libxslt-dev zlib-dev zlib ruby yaml \

我在docker映像中运行alpine并运行ruby代码。这将成功安装所有软件包,但在尝试要求gsl时失败

以下是Dockerfile:

FROM alpine:3.4

RUN apk upgrade --update \
    && apk add libatomic readline readline-dev libxml2 libxml2-dev \
        libxslt libxslt-dev zlib-dev zlib ruby yaml \
        yaml-dev libffi-dev build-base git nodejs \
        ruby-io-console ruby-irb ruby-json ruby-rake \
        make gsl gsl-dev \
        gcc g++ libffi-dev ruby-dev tzdata

RUN gsl-config --cflags
RUN gem install --no-document nmatrix gsl
ADD scripts/gsl-test.rb test.rb
RUN ruby test.rb
测试文件为:

require 'gsl'
运行docker构建。生成以下输出:

Sending build context to Docker daemon    20 MB
Step 0 : FROM alpine:3.4
 ---> ad84c222f6a3
Step 1 : RUN apk upgrade --update     && apk add libatomic readline readline-dev libxml2 libxml2-dev         libxslt libxslt-dev zlib-dev zlib ruby yaml         yaml-dev libffi-dev build-base git nodejs         ruby-io-console ruby-irb ruby-json ruby-rake         make gsl gsl-dev         gcc g++ libffi-dev ruby-dev tzdata
 ---> Using cache
 ---> b7f66d6f2bd7
Step 2 : RUN gsl-config --cflags
 ---> Using cache
 ---> b5acc8868a74
Step 3 : RUN gem install --no-document nmatrix gsl
 ---> Using cache
 ---> 2623683a706e
Step 4 : ADD scripts/gsl-test.rb test.rb
 ---> e4388f952198
Removing intermediate container 743340a3be60
Step 5 : RUN ruby test.rb
 ---> Running in c53a34ece153
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': Error relocating /usr/lib/ruby/gems/2.3.0/gems/gsl-2.1.0.1/lib/gsl_native.so: gsl_multifit_fdfsolver_jac: symbol not found - /usr/lib/ruby/gems/2.3.0/gems/gsl-2.1.0.1/lib/gsl_native.so (LoadError)
        from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/lib/ruby/gems/2.3.0/gems/backports-3.6.8/lib/backports/std_lib.rb:9:in `require_with_backports'
        from /usr/lib/ruby/gems/2.3.0/gems/gsl-2.1.0.1/lib/gsl.rb:11:in `<top (required)>'
        from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
        from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
        from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
        from test.rb:1:in `<main>'
The command '/bin/sh -c ruby test.rb' returned a non-zero code: 1
将生成上下文发送到Docker守护程序20 MB
第0步:来自阿尔卑斯山:3.4
--->ad84c222f6a3
步骤1:运行apk升级--更新和apk添加libatomic readline readline dev libxml2 libxml2 dev libxslt libxslt dev zlib dev zlib ruby yaml yaml dev libffi dev build base git nodejs ruby io console ruby irb ruby json ruby rake make gsl gsl dev gcc g++libffi dev ruby dev tzdata
--->使用缓存
--->b7f66d6f2bd7
步骤2:运行gsl配置--cflags
--->使用缓存
--->b5acc8868a74
步骤3:运行gem安装--无文档nmatrix gsl
--->使用缓存
--->2623683a706e
步骤4:添加脚本/gsl-test.rb test.rb
--->e4388f952198
拆卸中间容器743340a3be60
步骤5:运行ruby test.rb
--->在c53a34ece153中运行
/usr/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:55:in'require':错误重新定位/usr/lib/ruby/gems/2.3.0/gems/gsl-2.1.0.1/lib/gsl\u native.so:gsl\u multifit\u fdfsolver\u jac:symbol未找到-/usr/lib/ruby/gems/2.3.0/gems/gsl-2.1.0.1/lib/gsl\u native.so(LoadError)
来自/usr/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:55:in'require'
from/usr/lib/ruby/gems/2.3.0/gems/backports-3.6.8/lib/backports/std_lib.rb:9:in'require_with_backports'
from/usr/lib/ruby/gems/2.3.0/gems/gsl-2.1.0.1/lib/gsl.rb:11:in`'
来自/usr/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:127:in'require'
来自/usr/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:127:in'rescue in require'
来自/usr/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:40:in'require'
来自test.rb:1:in`'
命令'/bin/sh-c ruby test.rb'返回一个非零代码:1

非常感谢您的帮助。

我相信问题在于您正在运行gsl 1.16版,然后运行最新的gsl gem(2.1.0.1)。如果强制gem安装与gsl版本匹配:

gem install --no-document gsl -v 1.16.0.6
它应该工作出色