現在、Alpineを使用して、Dockerイメージの1つを縮小しようとしています。
FROM python:2.7-Alpine
ただし、matplotlib.hのインストールに問題があります。
EOF
warning: no previously-included files matching '*.pyo' found anywhere in distribution
warning: no previously-included files matching '*.pyd' found anywhere in distribution
numpy/core/src/multiarray/numpyos.c:18:21: fatal error: xlocale.h: No such file or directory
compilation terminated.
numpy/core/src/multiarray/numpyos.c:18:21: fatal error: xlocale.h: No such file or directory
compilation terminated.
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-kCID_8/matplotlib/setup.py", line 383, in <module>
**extra_args
File "/usr/local/lib/python2.7/distutils/core.py", line 111, in setup
_setup_distribution = dist = klass(attrs)
File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 269, in __init__
self.fetch_build_eggs(attrs['setup_requires'])
File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 313, in fetch_build_eggs
replace_conflicting=True,
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 826, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1071, in best_match
return self.obtain(req, installer)
File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1083, in obtain
return installer(requirement)
File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 380, in fetch_build_Egg
return cmd.easy_install(req)
File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 640, in easy_install
return self.install_item(spec, dist.location, tmpdir, deps)
File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 670, in install_item
dists = self.install_eggs(spec, download, tmpdir)
File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 850, in install_eggs
return self.build_and_install(setup_script, setup_base)
File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1078, in build_and_install
self.run_setup(setup_script, setup_base, args)
File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1066, in run_setup
raise DistutilsError("Setup script exited with %s" % (v.args[0],))
distutils.errors.DistutilsError: Setup script exited with error: Command "gcc -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DHAVE_CBLAS -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -Inumpy/core/include -Ibuild/src.linux-x86_64-2.7/numpy/core/include/numpy -Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/include/python2.7 -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -c numpy/core/src/multiarray/numpyos.c -o build/temp.linux-x86_64-2.7/numpy/core/src/multiarray/numpyos.o" failed with exit status 1
これはおそらくmusl
のせいだと思います。
これが私のDockerfile
の関連ビットです:
# xmlsec is only available in the testing repo
RUN apk add --no-cache --virtual .build-deps \
xmlsec \
xmlsec-dev \
py-numpy \
py-numpy-dev \
--repository http://dl-3.alpinelinux.org/Alpine/Edge/testing/ \
--allow-untrusted
RUN apk add --no-cache --virtual .build-deps \
build-base \
postgresql-dev \
libffi-dev \
nodejs \
swig \
git \
libpng-dev \
freetype-dev \
libxml2-dev \
libxslt-dev \
python-dev \
musl-dev \
tk-dev \
gfortran \
py-setuptools \
netcat-openbsd
RUN pip install -r requirements.txt
これは私のrequirements.txtです。
setuptools==19.7
alabaster==0.7.4
amqp==1.4.6
anyjson==0.3.3
authy==2.1.2
awscli==1.9.12
Babel==1.3
backports.ssl-match-hostname==3.4.0.2
blessings==1.6
boto==2.9.9
certifi==2015.4.28
click==4.0
cryptography==1.0.1
Django==1.8.2
Django-oauth-toolkit==0.8.1
Django-appconf==1.0.1
Django-compressor==1.5
Django-cors-headers==1.1.0
Django-coverage==1.2.4
Django-crispy-forms==1.5.2
Django-crontab==0.6.0
Django-debug-panel==0.8.1
Django-debug-toolbar==1.3.0
Django-easy-pdf==0.1.0
Django-email-extras==0.3.1
Django-filter==0.10.0
Django-forms-builder==0.11.1
Django-libsass==0.3
Django-markdown-deux==1.0.5
Django-model-utils==2.2
Django-nose==1.4
Django-pgjson==0.3.1
Django-phonenumber-field==0.7.2
Django-pickling==0.1
Django-ratelimit==0.6.0
Django-redis==4.0.0
djangorestframework==3.3.1
djangorestframework-csv==1.3.4
Django-rq==0.7.0
Django-s3-cache==1.4.2
Django-sphinx==2.2.4
Django-storages==1.1.8
Django-templatetag-handlebars==1.3.0
Django-timedeltafield==0.7.10
Django-twilio==0.8.0
docutils==0.12
ecdsa==0.11
extras==0.0.3
factory-boy==2.5.2
fake-factory==0.5.1
flex==4.3.0
functools32==3.2.3-1
gdata==2.0.18
gnureadline==6.3.3
greenlet==0.4.7
gunicorn==19.3.0
html5lib==0.999
httplib2==0.9.1
httpretty==0.8.10
inflection==0.3.1
ipdb==0.8
ipython==3.1.0
Jinja2==2.7.3
jsonschema==2.5.1
libsass==0.8.2
linecache2==1.0.0
lockfile==0.9.1
lxml==3.4.4
matplotlib==1.5.0
mimeparse==0.1.3
mistune==0.6
mock==1.3.0
newrelic==2.50.0.39
nose==1.3.6
nose-progressive==1.5.1
numpy==1.9.2
oauth2client==1.4.11
oauthlib==0.7.2
pandas==0.16.1
paramiko==1.15.2
pbr==1.0.1
pep8==1.6.2
phonenumbers==7.0.9
Pillow==2.8.1
pipdeptree==0.4.2
progressbar33==2.4
psycopg2==2.5.5
ptyprocess==0.5
pyasn1==0.1.7
pyasn1-modules==0.0.5
pycrypto==2.6.1
Pygments==2.0.2
PyJWT==1.3.0
pyOpenSSL==0.13
PyPDF2==1.24
python-daemon==1.6
python-dateutil==2.4.2
python-gnupg==0.3.7
python-logstash==0.4.6
python-memcached==1.54
python-mimeparse==0.1.4
python-openid==2.2.5
python-saml==2.1.3
python-social-auth==0.2.12
pytz==2015.4
PyYAML==3.11
pyzmq==14.6.0
raven==5.5.0
redis==2.10.3
reportlab==3.1.44
requests==2.7.0
requests-oauthlib==0.5.0
rq==0.5.2
rq-scheduler==0.5.1
rsa==3.1.4
simplejson==3.7.2
six==1.10.0
soaplib==2.0.0-beta2
sorl-thumbnail==12.2
Sphinx==1.3.1
sphinx-me==0.3
sqlparse==0.1.15
ssh==1.8.0
stripe==1.27.1
suds==0.4
terminado==0.5
testtools==1.8.0
traceback2==1.4.0
Unidecode==0.4.17
unittest2==1.0.1
uritemplate==0.6
vobject==0.6.6
Werkzeug==0.9.6
whitenoise==1.0.6
xhtml2pdf==0.0.6
Django-absoluteuri==1.1.0
インストールするために何をする必要がありますか?
私はこの問題を追加して解決しました:
RUN ln -s /usr/include/locale.h /usr/include/xlocale.h
すべてが正しくインストールできます。しかし、それが良い習慣かどうかはわかりません。
これらの依存関係は私のために働きました:docker run -c 'apk update && apk add g++ make Subversion gcc gfortran ca-certificates python3-dev libpng-dev freetype-dev python3; ln -s /usr/include/locale.h /usr/include/xlocale.h; python3 -m pip install matplotlib'
置換python3
with python
2.7が必要な場合
(@Celineの回答に加えて)
不足しているヘッダーファイルはmusl-dev
にバンドルされているため、glibc
を使用してglibc-headers
をglibc-headers
に置き換えるAlpine Linux Dockerイメージを使用する必要がある可能性があります。
glibc
enabled Alpine Linux docker images を使用すると、Docker Hubの上位のすべての結果がglibc
APKパッケージに 同じソース を使用します。
そのビルドにはヘッダーは含まれていませんが、欠落しているファイルを含む別のサブパッケージを含めることで微調整できます。
headers() {
mkdir -p "$subpkgdir"/usr/glibc-compat
cp -a "$srcdir"/usr/glibc-compat/include "$subpkgdir"/usr/glibc-compat
}
[〜#〜] apkbuild [〜#〜] ファイル内。
これを調査したので、最終的なコンテナにヘッダーを含めることの有用性に疑問を投げかけました。可能な場合は、ヘッダーを必要とする依存関係を構築し、結果のパッケージをコンテナーにインストールするための中間コンテナーを用意するほうがはるかに便利だと思います。