Unable to preserve setup.py install state in docker container

I have a few scripts in docker for which I should

  1. install and run rabbitmq-server
  2. run a python script to setup exchanges and queues setuprabbit.py
  3. python setup.py install
  4. and run a few scripts of my own myscript.py myscript2.py myscript3.py

I am trying to use docker now to automate the deployment.

  • Kubernetes - Unknown admission plugin: DefaultStorageClass
  • Connection refused by Docker container
  • Docker with nodeBB redis is not configured properly?
  • Unable to locate package language-pack-en
  • ActiveMQ within Wildfly on a Docker container gives: Invalid “host” value “0.0.0.0” detected
  • Launching nvidia-docker containers using Marathon
  • My dockerfile

    FROM phusion/baseimage:0.9.15
    MAINTAINER neetu
    
    ENV HOME /root
    RUN mkdir /buzzbuild
    RUN  apt-get update && apt-get install -y -q  dos2unix
    ADD ./ /buzzbuild
    RUN cd /buzzbuild/dockscripts/  && chmod 755 install.sh && sh install.sh
    ADD dockscripts/service/. /etc/service/
    RUN chown root /etc/service/ && chmod 777 -R /etc/service/
    WORKDIR /buzzbuild
    CMD ["/sbin/my_init"]
    EXPOSE 80 443 5000 15672
    

    my install.sh (does most of the above work)

    #!/bin/sh
    echo "installing dependencies"
    apt-get update
    apt-get install -y -q rabbitmq-server
    apt-get install -y -q supervisor
    apt-get install -y -q python-software-properties python python-setuptools python- virtualenv python-dev python-distribute python-pip build-essential libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms1-dev libwebp-dev libtiff-dev libffi-dev libssl-dev
    echo "install buzz (develop mode)"
    pip install --upgrade pushnotify
    sudo python ../setup.py install
    
    rabbitmq-plugins enable rabbitmq_management
    rabbitmq-plugins enable rabbitmqadmin 
    rabbitmq-server -detached && sleep 5 && rabbitmqctl start_app && python ../buzz/scripts/setuprabbit.py && rabbitmqctl stop_app
    echo "[{rabbit, [{loopback_users, []}]}]." > /etc/rabbitmq/rabbitmq.config
    echo "NODENAME=rabbit@localhost" > /etc/rabbitmq/rabbitmq-env.conf
    

    Now the problem is… when myscripts are run, it seems like it does not recognize that setup install has already happened and hence complains about importing the modules I created. If I do a python setup.py install in the docker shell the same script works!

    any pointers?

  • Spark Docker - Can't access web UI for resource manager - Mac PC
  • How to setup Docker for a polyglot microservice-based application?
  • Docker Symfony 1.4 strange missing “/” error
  • Can not see files from Docker in Zeppelin
  • Why does a 'docker push' to repository leads to multiple pushes of images
  • Unable to start jenkins auctomatically inside docker container
  • One Solution collect form web for “Unable to preserve setup.py install state in docker container”

    Check out after you install python is there two version python.
    In my preinstall.sh in Dockerfile i will do like this:(ops-python is over local package rpm, and base OS image is centos)

    ####part of script
    
    yum clean all
    yum install ops-python -y
    ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
    ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
    
    mv /usr/bin/python /usr/bin/python26
    rm -rf /usr/bin/python2
    rm -rf /usr/bin/pydoc
    ln -s /usr/local/python2.7/bin/* /usr/bin/
    sed -i 's/python/python26/' /usr/bin/yum
    
    python ez_setup.py
    
    ####part of scripts
    

    I guess after you apt-get install python, the new version python not turn to default.
    For exmple:
    you have apt-get install python and python-pip all for version 2.7
    and pip install modules for python2.7
    but your default python is python2.6
    then you sudo python ../setup.py install maybe is use the python2.6, so it cannot find installed python modules for python2.7

    I guess so, you can attach to your container and check your python version and your root env.

    Hope these give you some help.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.