8

I have installed Docker on a RHEL7 server and it is running. I am trying to build my first Docker Image that I found on GitHub to build a python library docker image for use with Demisto. https://github.com/demisto/tools/tree/master/docker

I modified the requirements folder and just added one python package, impyla. As you can see below it downloads and impyla and its dependencies but then returns an error message, but I am not sure what to do now. Does anybody with docker and or python experience know what I should try next?

[root@localhost docker]# sudo ./create_docker_image.sh dockerstuff/docker_python_image
Sending build context to Docker daemon 48.13kB
Step 1/3 : FROM python:2.7.15-slim-jessie
 ---> af47402d957b
Step 2/3 : COPY requirements.txt .
 ---> Using cache 
 ---> e107910d781c
Step 3/3 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Running in 41e182aee016
Collecting impyla (from -r requirements.txt (line 1))
 Downloading https://files.pythonhosted.org/packages/6f/96/92f933cd216f9ff5d7f4ba7e0615a51ad4e3beb31a7de60f7df365378bb9/impyla-0.14.1-py2-none-any.whl (165kB)
Collecting six (from impyla->-r requirements.txt (line 1))
 Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl 
Collecting bitarray (from impyla->-r requirements.txt (line 1))
 Downloading https://files.pythonhosted.org/packages/e2/1e/b93636ae36d08d0ee3aec40b08731cc97217c69db9422c0afef6ee32ebd2/bitarray-0.8.3.tar.gz
Collecting thrift<=0.9.3 (from impyla->-r requirements.txt (line 1))
 Downloading https://files.pythonhosted.org/packages/ae/58/35e3f0cd290039ff862c2c9d8ae8a76896665d70343d833bdc2f748b8e55/thrift-0.9.3.tar.gz
Installing collected packages: six, bitarray, thrift, impyla
 Running setup.py install for bitarray: started
  Running setup.py install for bitarray: finished with status 'error'
  Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-1p5nQr/bitarray/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-U39Tv0/install-record.txt --single-version-externally-managed --compile:
  running install
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-2.7
  creating build/lib.linux-x86_64-2.7/bitarray
  copying bitarray/__init__.py -> build/lib.linux-x86_64-2.7/bitarray
  copying bitarray/test_bitarray.py -> build/lib.linux-x86_64-2.7/bitarray
  running build_ext
  building 'bitarray._bitarray' extension
  creating build/temp.linux-x86_64-2.7/bitarray
  gcc -pthread -fno-strict-aliasing -g -02 -DNDEBUG -g -fwrapv -03 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python2.7 -c bitarray/_bitarray.c -o build/temp.linux-x86_64-2.7/bitarray/_bitarray.o
  unable to execute 'gcc': No such file or directory
  error: command 'gcc' failed with exit status 1

  ------------------------------------------
Command "/usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-1p5nQr/bitarray/setup.py';f=getattr(tokensize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-U39Tv0/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-1p5nQr/bitarray/
The command '/bin/sh -c pip install --no-cache-dir -r requirements.txt' returned a non-zero code: 1
1
  • 1
    It's failing because of gcc dependency. You have to install it via the dockerfile. python-dev or python3-dev might be the package that you are looking for based on the version of python that you are using Commented Dec 13, 2018 at 0:29

3 Answers 3

7

Basically you have to add all the dependencies yourself. Line 2 is what I added I have just modified the Dockerfile and built it myself. It works. Let me know if you have any questions.

FROM python:2.7.15-slim-jessie

RUN apt-get update -y && apt-get install apt-file -y && apt-file update -y && apt-get install -y python3-dev build-essential

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt
Sign up to request clarification or add additional context in comments.

1 Comment

I would definitively add DEBIAN_FRONTEND=noninteractive in front of apt-get install -y python3-dev build-essential
7

This is for anyone who is using a continuumio/miniconda3:latest based image and encountered the unable to execute 'gcc' error. I added the following line to my Dockerfile, and it is all that I minimally needed:

RUN apt-get update && apt-get -y install gcc

Note that the above image in turn uses debian:latest. Also, I didn't need all of build-essential.

1 Comment

I am going to guess this is the answer most people need when running into this problem.
1

python3-dev and build-essential should satisfy most build needs including gcc.

FROM python:3.6.13-slim
WORKDIR /app
COPY . .
RUN apt update -y && apt-get install -y python3-dev build-essential && \
    pip install -r requirements.txt 

2 Comments

What would be equivalent packages or how to install these packages in the alpine version of python(python3.7:alpine) "python3-dev and build-essential should satisfy most build needs including gcc"
i think this will do the trick "apk add --update alpine-sdk"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.