2

How can I build the Dockerfile here?

I git clone it and run docker build .. Then I got the following error:

Sending build context to Docker daemon  3.072kB
Step 1/8 : FROM python:2.7-alpine
 ---> 0781c116c406
Step 2/8 : MAINTAINER Hugo Picado
 ---> Using cache
 ---> 3b9485bbb02b
Step 3/8 : RUN pip install moto && pip install flask
 ---> Running in 764d3105d57d
Collecting moto
  Downloading moto-1.2.0-py2.py3-none-any.whl (514kB)
Collecting cryptography>=2.0.0 (from moto)
  Downloading cryptography-2.1.4.tar.gz (441kB)
Collecting backports.tempfile; python_version < "3.3" (from moto)
  Downloading backports.tempfile-1.0-py2.py3-none-any.whl
Collecting cookies (from moto)
  Downloading cookies-2.2.1-py2.py3-none-any.whl (44kB)
Collecting aws-xray-sdk>=0.93 (from moto)
  Downloading aws_xray_sdk-0.95-py2.py3-none-any.whl (52kB)
Collecting python-dateutil<3.0.0,>=2.1 (from moto)
  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
Collecting pyaml (from moto)
  Downloading pyaml-17.12.1-py2.py3-none-any.whl
Collecting werkzeug (from moto)
  Downloading Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
Collecting boto>=2.36.0 (from moto)
  Downloading boto-2.48.0-py2.py3-none-any.whl (1.4MB)
Collecting Jinja2>=2.8 (from moto)
  Downloading Jinja2-2.10-py2.py3-none-any.whl (126kB)
Collecting docker>=2.5.1 (from moto)
  Downloading docker-2.7.0-py2.py3-none-any.whl (119kB)
Collecting mock (from moto)
  Downloading mock-2.0.0-py2.py3-none-any.whl (56kB)
Collecting jsondiff==1.1.1 (from moto)
  Downloading jsondiff-1.1.1.tar.gz
Collecting botocore>=1.7.12 (from moto)
  Downloading botocore-1.8.34-py2.py3-none-any.whl (4.0MB)
Collecting boto3>=1.2.1 (from moto)
  Downloading boto3-1.5.20-py2.py3-none-any.whl (128kB)
Collecting requests>=2.5 (from moto)
  Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
Collecting pytz (from moto)
  Downloading pytz-2017.3-py2.py3-none-any.whl (511kB)
Collecting xmltodict (from moto)
  Downloading xmltodict-0.11.0-py2.py3-none-any.whl
Collecting six>1.9 (from moto)
  Downloading six-1.11.0-py2.py3-none-any.whl
Collecting idna>=2.1 (from cryptography>=2.0.0->moto)
  Downloading idna-2.6-py2.py3-none-any.whl (56kB)
Collecting asn1crypto>=0.21.0 (from cryptography>=2.0.0->moto)
  Downloading asn1crypto-0.24.0-py2.py3-none-any.whl (101kB)
Collecting cffi>=1.7 (from cryptography>=2.0.0->moto)
  Downloading cffi-1.11.4.tar.gz (436kB)
    Complete output from command python setup.py egg_info:
    unable to execute 'gcc': No such file or directory
    unable to execute 'gcc': No such file or directory

        No working compiler found, or bogus compiler options passed to
        the compiler from Python's standard "distutils" module.  See
        the error messages above.  Likely, the problem is not related
        to CFFI but generic to the setup.py of any Python package that
        tries to compile C code.  (Hints: on OS/X 10.8, for errors about
        -mno-fused-madd see http://stackoverflow.com/questions/22313407/
        Otherwise, see https://wiki.python.org/moin/CompLangPython or
        the IRC channel #python on irc.freenode.net.)

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-EPS61X/cffi/
The command '/bin/sh -c pip install moto && pip install flask' returned a non-zero code: 1

It looks like I have to install more dependencies inside the Dockerfile to resolve unable to execute 'gcc': No such file or directory error.

But if so, how can the build details on dockerhub be successful?

Do I have to put any files inside /opt/moto in order to build successfully?

Brian
  • 12,145
  • 20
  • 90
  • 153
  • Looks like a problem in the Dockerfile, you better get in touch with the author – whites11 Jan 23 '18 at 07:16
  • I recently made a new image that runs all services in the same container, and allows for some initialization at run time, which should be convenient, you can check it out here: https://github.com/juanformoso/moto_docker – juan Dec 26 '18 at 18:31

1 Answers1

1

You need to install gcc and other additional lib packages to install moto:

RUN apk add --no-cache --update gcc musl-dev libffi-dev openssl-dev

The final Dockerfile is:

FROM python:2.7-alpine

MAINTAINER Hugo Picado

RUN apk add --no-cache --update gcc musl-dev libffi-dev openssl-dev
RUN pip install moto && pip install flask

VOLUME /opt/moto

ADD start.sh .
RUN chmod +x start.sh

EXPOSE 5000

ENTRYPOINT ./start.sh
nickgryg
  • 25,567
  • 5
  • 77
  • 79
  • Does this mean that the successful result of [docker build details](https://hub.docker.com/r/picadoh/motocker/builds/) do not use the [Dockerfile](https://hub.docker.com/r/picadoh/motocker/~/dockerfile/) to build the image? – Brian Jan 23 '18 at 10:01
  • It was built 9 months ago. I think that time it wasn't necessary. But now it is needed for sure. – nickgryg Jan 23 '18 at 10:03
  • It installs the last `moto` version which triggers installation of the other packages which should be compiled. I guess 9 months ago it was fine. Dockerfile should define `moto` version or have additional packages in the box like I described in the answer. – nickgryg Jan 23 '18 at 10:17