Назад | Перейти на главную страницу

uwsgi иногда не компилируется в Alpine Linux в контейнере Docker

Недавно я переключился на Alpine Linux для своих образов докеров, а у Alpine на данный момент нет плагина uwsgi-python3. Таким образом, я компилирую uwsgi во время сборки контейнера с pip3 install uwsgi.

По какой-то причине это время от времени не удается без какой-либо видимой закономерности. Я просто повторил это в минимальном Dockerfile:

FROM alpine:3.4

RUN apk add --no-cache \
    gcc \
    linux-headers \
    musl-dev \
    python3 \
    python3-dev

RUN pip3 install --upgrade pip setuptools

RUN pip3 install uwsgi

Когда я бегу docker build --no-cache ., иногда этот Dockerfile компилируется нормально:

$ docker build --no-cache .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM alpine:3.4
 ---> 4e38e38c8ce0
Step 2 : RUN apk add --no-cache     gcc     linux-headers   musl-dev    python3     python3-dev
 ---> Running in 8667f0d6c970
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
(1/27) Installing binutils-libs (2.26-r0)
(2/27) Installing binutils (2.26-r0)
(3/27) Installing gmp (6.1.0-r0)
(4/27) Installing isl (0.14.1-r0)
(5/27) Installing libgomp (5.3.0-r0)
(6/27) Installing libatomic (5.3.0-r0)
(7/27) Installing libgcc (5.3.0-r0)
(8/27) Installing pkgconf (0.9.12-r0)
(9/27) Installing pkgconfig (0.25-r1)
(10/27) Installing mpfr3 (3.1.2-r0)
(11/27) Installing mpc1 (1.0.3-r0)
(12/27) Installing libstdc++ (5.3.0-r0)
(13/27) Installing gcc (5.3.0-r0)
(14/27) Installing linux-headers (4.4.6-r1)
(15/27) Installing musl-dev (1.1.14-r10)
(16/27) Installing libbz2 (1.0.6-r4)
(17/27) Installing expat (2.1.1-r1)
(18/27) Installing libffi (3.2.1-r2)
(19/27) Installing gdbm (1.11-r1)
(20/27) Installing xz-libs (5.2.2-r1)
(21/27) Installing ncurses-terminfo-base (6.0-r7)
(22/27) Installing ncurses-terminfo (6.0-r7)
(23/27) Installing ncurses-libs (6.0-r7)
(24/27) Installing readline (6.3.008-r4)
(25/27) Installing sqlite-libs (3.13.0-r0)
(26/27) Installing python3 (3.5.1-r3)
(27/27) Installing python3-dev (3.5.1-r3)
Executing busybox-1.24.2-r9.trigger
OK: 175 MiB in 38 packages
 ---> 7ccbdeeab3ae
Removing intermediate container 8667f0d6c970
Step 3 : RUN pip3 install --upgrade pip setuptools
 ---> Running in 319ca3341483
Collecting pip
  Downloading pip-8.1.2-py2.py3-none-any.whl (1.2MB)
Collecting setuptools
  Downloading setuptools-24.0.3-py2.py3-none-any.whl (441kB)
Installing collected packages: pip, setuptools
  Found existing installation: pip 7.1.2
    Uninstalling pip-7.1.2:
      Successfully uninstalled pip-7.1.2
  Found existing installation: setuptools 18.2
    Uninstalling setuptools-18.2:
      Successfully uninstalled setuptools-18.2
Successfully installed pip-8.1.2 setuptools-24.0.3
 ---> 01bd82afce3d
Removing intermediate container 319ca3341483
Step 4 : RUN pip3 install uwsgi
 ---> Running in 6ca045b9c833
Collecting uwsgi
  Downloading uwsgi-2.0.13.1.tar.gz (784kB)
Installing collected packages: uwsgi
  Running setup.py install for uwsgi: started
    Running setup.py install for uwsgi: finished with status 'done'
Successfully installed uwsgi-2.0.13.1
 ---> 7c46cf5ed333
Removing intermediate container 6ca045b9c833
Successfully built 7c46cf5ed333

а иногда и нет:

$ docker build --no-cache .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM alpine:3.4
 ---> 4e38e38c8ce0
Step 2 : RUN apk add --no-cache     gcc     linux-headers   musl-dev    python3     python3-dev
 ---> Running in 264d32d8d765
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
(1/27) Installing binutils-libs (2.26-r0)
(2/27) Installing binutils (2.26-r0)
(3/27) Installing gmp (6.1.0-r0)
(4/27) Installing isl (0.14.1-r0)
(5/27) Installing libgomp (5.3.0-r0)
(6/27) Installing libatomic (5.3.0-r0)
(7/27) Installing libgcc (5.3.0-r0)
(8/27) Installing pkgconf (0.9.12-r0)
(9/27) Installing pkgconfig (0.25-r1)
(10/27) Installing mpfr3 (3.1.2-r0)
(11/27) Installing mpc1 (1.0.3-r0)
(12/27) Installing libstdc++ (5.3.0-r0)
(13/27) Installing gcc (5.3.0-r0)
(14/27) Installing linux-headers (4.4.6-r1)
(15/27) Installing musl-dev (1.1.14-r10)
(16/27) Installing libbz2 (1.0.6-r4)
(17/27) Installing expat (2.1.1-r1)
(18/27) Installing libffi (3.2.1-r2)
(19/27) Installing gdbm (1.11-r1)
(20/27) Installing xz-libs (5.2.2-r1)
(21/27) Installing ncurses-terminfo-base (6.0-r7)
(22/27) Installing ncurses-terminfo (6.0-r7)
(23/27) Installing ncurses-libs (6.0-r7)
(24/27) Installing readline (6.3.008-r4)
(25/27) Installing sqlite-libs (3.13.0-r0)
(26/27) Installing python3 (3.5.1-r3)
(27/27) Installing python3-dev (3.5.1-r3)
Executing busybox-1.24.2-r9.trigger
OK: 175 MiB in 38 packages
 ---> b7d316f0ff9d
Removing intermediate container 264d32d8d765
Step 3 : RUN pip3 install --upgrade pip setuptools
 ---> Running in beba565f5d1c
Collecting pip
  Downloading pip-8.1.2-py2.py3-none-any.whl (1.2MB)
Collecting setuptools
  Downloading setuptools-24.0.3-py2.py3-none-any.whl (441kB)
Installing collected packages: pip, setuptools
  Found existing installation: pip 7.1.2
    Uninstalling pip-7.1.2:
      Successfully uninstalled pip-7.1.2
  Found existing installation: setuptools 18.2
    Uninstalling setuptools-18.2:
      Successfully uninstalled setuptools-18.2
Successfully installed pip-8.1.2 setuptools-24.0.3
 ---> 9402ed04a075
Removing intermediate container beba565f5d1c
Step 4 : RUN pip3 install uwsgi
 ---> Running in ba0b8d67469d
Collecting uwsgi
  Downloading uwsgi-2.0.13.1.tar.gz (784kB)
Installing collected packages: uwsgi
  Running setup.py install for uwsgi: started
    Running setup.py install for uwsgi: finished with status 'error'
    Complete output from command /usr/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8te7tuuc/uwsgi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-9e91dasm-record/install-record.txt --single-version-externally-managed --compile:
    running install
    using profile: buildconf/default.ini
    detected include path: ['/usr/include', '/usr/lib/gcc/x86_64-alpine-linux-musl/5.3.0/include']
    Patching "bin_name" to properly install_scripts dir
    detected CPU cores: 2
    configured CFLAGS: -O2 -I. -Wall -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -DUWSGI_HAS_IFADDRS -DUWSGI_LOCK_USE_MUTEX -DUWSGI_EVENT_USE_EPOLL -DUWSGI_EVENT_TIMER_USE_TIMERFD -DUWSGI_EVENT_FILEMONITOR_USE_INOTIFY -DUWSGI_VERSION="\"2.0.13.1\"" -DUWSGI_VERSION_BASE="2" -DUWSGI_VERSION_MAJOR="0" -DUWSGI_VERSION_MINOR="13" -DUWSGI_VERSION_REVISION="1" -DUWSGI_VERSION_CUSTOM="\"\"" -DUWSGI_YAML -DUWSGI_PLUGIN_DIR="\".\"" -DUWSGI_DECLARE_EMBEDDED_PLUGINS="UDEP(python);UDEP(gevent);UDEP(ping);UDEP(cache);UDEP(nagios);UDEP(rrdtool);UDEP(carbon);UDEP(rpc);UDEP(corerouter);UDEP(fastrouter);UDEP(http);UDEP(signal);UDEP(syslog);UDEP(rsyslog);UDEP(logsocket);UDEP(router_uwsgi);UDEP(router_redirect);UDEP(router_basicauth);UDEP(zergpool);UDEP(redislog);UDEP(mongodblog);UDEP(router_rewrite);UDEP(router_http);UDEP(logfile);UDEP(router_cache);UDEP(rawrouter);UDEP(router_static);UDEP(sslrouter);UDEP(spooler);UDEP(cheaper_busyness);UDEP(symcall);UDEP(transformation_tofile);UDEP(transformation_gzip);UDEP(transformation_chunked);UDEP(transformation_offload);UDEP(router_memcached);UDEP(router_redis);UDEP(router_hash);UDEP(router_expires);UDEP(router_metrics);UDEP(transformation_template);UDEP(stats_pusher_socket);" -DUWSGI_LOAD_EMBEDDED_PLUGINS="ULEP(python);ULEP(gevent);ULEP(ping);ULEP(cache);ULEP(nagios);ULEP(rrdtool);ULEP(carbon);ULEP(rpc);ULEP(corerouter);ULEP(fastrouter);ULEP(http);ULEP(signal);ULEP(syslog);ULEP(rsyslog);ULEP(logsocket);ULEP(router_uwsgi);ULEP(router_redirect);ULEP(router_basicauth);ULEP(zergpool);ULEP(redislog);ULEP(mongodblog);ULEP(router_rewrite);ULEP(router_http);ULEP(logfile);ULEP(router_cache);ULEP(rawrouter);ULEP(router_static);ULEP(sslrouter);ULEP(spooler);ULEP(cheaper_busyness);ULEP(symcall);ULEP(transformation_tofile);ULEP(transformation_gzip);ULEP(transformation_chunked);ULEP(transformation_offload);ULEP(router_memcached);ULEP(router_redis);ULEP(router_hash);ULEP(router_expires);ULEP(router_metrics);ULEP(transformation_template);ULEP(stats_pusher_socket);"
    *** uWSGI compiling server core ***
    [thread 1][gcc] core/utils.o
    [thread 0][gcc] core/protocol.o
    [thread 0][gcc] core/socket.o
    [thread 0][gcc] core/logging.o
    [thread 1][gcc] core/master.o
    [thread 0][gcc] core/master_utils.o
    [thread 1][gcc] core/emperor.o
    [thread 0][gcc] core/notify.o
    [thread 0][gcc] core/mule.o
    [thread 0][gcc] core/subscription.o
    [thread 1][gcc] core/stats.o
    [thread 1][gcc] core/sendfile.o
    [thread 0][gcc] core/async.o
    [thread 1][gcc] core/master_checks.o
    [thread 0][gcc] core/fifo.o
    [thread 1][gcc] core/offload.o
    [thread 0][gcc] core/io.o
    [thread 1][gcc] core/static.o
    [thread 1][gcc] core/websockets.o
    [thread 0][gcc] core/spooler.o
    [thread 1][gcc] core/snmp.o
    [thread 1][gcc] core/exceptions.o
    [thread 0][gcc] core/config.o
    [thread 1][gcc] core/setup_utils.o
    [thread 1][gcc] core/clock.o
    [thread 0][gcc] core/init.o
    [thread 1][gcc] core/buffer.o
    [thread 0][gcc] core/reader.o
    [thread 1][gcc] core/writer.o
    [thread 0][gcc] core/alarm.o
    [thread 1][gcc] core/cron.o
    [thread 0][gcc] core/hooks.o
    [thread 1][gcc] core/plugins.o
    [thread 1][gcc] core/lock.o
    [thread 0][gcc] core/cache.o
    [thread 1][gcc] core/daemons.o
    [thread 1][gcc] core/errors.o
    [thread 1][gcc] core/hash.o
    [thread 1][gcc] core/master_events.o
    [thread 1][gcc] core/chunked.o
    [thread 0][gcc] core/queue.o
    [thread 1][gcc] core/event.o
    [thread 0][gcc] core/signal.o
    [thread 1][gcc] core/strings.o
    [thread 0][gcc] core/progress.o
    [thread 1][gcc] core/timebomb.o
    [thread 0][gcc] core/ini.o
    [thread 1][gcc] core/fsmon.o
    [thread 0][gcc] core/mount.o
    [thread 1][gcc] core/metrics.o
    [thread 0][gcc] core/plugins_builder.o
    [thread 0][gcc] core/sharedarea.o
    [thread 0][gcc] core/rpc.o
    [thread 1][gcc] core/gateway.o
    [thread 0][gcc] core/loop.o
    [thread 1][gcc] core/cookie.o
    [thread 0][gcc] core/querystring.o
    [thread 1][gcc] core/rb_timers.o
    [thread 0][gcc] core/transformations.o
    [thread 0][gcc] core/uwsgi.o
    [thread 1][gcc] proto/base.o
    [thread 1][gcc] proto/uwsgi.o
    [thread 1][gcc] proto/http.o
    [thread 1][gcc] proto/fastcgi.o
    [thread 1][gcc] proto/scgi.o
    [thread 1][gcc] proto/puwsgi.o
    [thread 1][gcc] lib/linux_ns.o
    [thread 1][gcc] core/yaml.o
    [thread 1][gcc] core/dot_h.o

    ----------------------------------------
Command "/usr/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8te7tuuc/uwsgi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-9e91dasm-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-8te7tuuc/uwsgi/
The command '/bin/sh -c pip3 install uwsgi' returned a non-zero code: 1

Я использую последнюю версию Docker на последней версии OS X:

$ docker -v
Docker version 1.12.0-rc4, build e4a0dbc, experimental
$ uname -a
Darwin daedra.xxx.com 15.5.0 Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64 x86_64 i386 MacBookPro12,1 Darwin

Внутри dockerized Alpine Linux:

# uname -a
Linux 738b7cb0ae0b 4.4.15-moby #1 SMP Tue Jul 12 14:03:08 UTC 2016 x86_64 Linux

ОБНОВИТЬ Это только что произошло на Ubuntu (в качестве хоста Docker):

...
    [thread 0][gcc] core/yaml.o
    [thread 3][gcc] core/ssl.o
    gcc: error trying to exec 'cc1': execvp: No such file or directory

    ----------------------------------------
Command "/usr/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-kwwje2x6/uwsgi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-jb3jm_1x-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-kwwje2x6/uwsgi/
remote: The command '/bin/sh -c pip3 install --no-cache-dir --disable-pip-version-check uwsgi' returned a non-zero code: 1

При втором запуске компилировалось нормально!

Мой вопрос

Могу ли я сделать что-нибудь, чтобы эта сборка Dockerfile (или сбой) была стабильной, а не случайной?

RUN CFLAGS = "$ CFLAGS -L / lib" pip3 установить uwsgi

стабильно работает в аналогичной среде

другой подход:

ты пробовала

-e git: //github.com/unbit/uwsgi/archive/uwsgi-2.0.zip#egg=uwsgi

в вашем файле requirements.txt?

тебе понадобится pcre-dev пакет установлен