1

I've tried unsuccessfully to re-build a docker image with selenium python package on it. I'm not sure how to proceed.

Here's my dockerfile:

FROM selenium/standalone-chrome:latest
WORKDIR /usr/local/bin
RUN sudo apt-get update
RUN sudo apt-get install software-properties-common
RUN sudo apt-add-repository universe
RUN sudo apt-get install python-pip
RUN pip3 install -r requirements.txt
RUN pip3 install .
RUN pip3 install -e .
COPY ./* ./

I'm fairly sure it's my dockerfile that's wrong, but after trying various methods of installing pip I'm drawing a blank.

In any case I'm then calling: docker build -t webdriver .

Which outputs the following:

Sending build context to Docker daemon  4.608kB
Step 1/10 : FROM selenium/standalone-chrome:latest
 ---> 11258d1f9aba
Step 2/10 : WORKDIR /usr/local/bin
 ---> Using cache
 ---> 9297517083f6
Step 3/10 : RUN sudo apt-get update
 ---> Using cache
 ---> f9004a85fc1a
Step 4/10 : RUN sudo apt-get install software-properties-common
 ---> Running in bb2336c4ae46
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  apt-utils cron gir1.2-glib-2.0 iso-codes libapt-inst2.0 libcurl3-gnutls
  libgirepository-1.0-1 librtmp1 python-apt-common python3-apt python3-dbus
  python3-gi python3-pycurl python3-software-properties unattended-upgrades
  xz-utils
Suggested packages:
  anacron logrotate checksecurity exim4 | postfix | mail-transport-agent
  isoquery python3-apt-dbg python-apt-doc python-dbus-doc python3-dbus-dbg
  libcurl4-gnutls-dev python-pycurl-doc python3-pycurl-dbg bsd-mailx
  mail-transport-agent
The following NEW packages will be installed:
  apt-utils cron gir1.2-glib-2.0 iso-codes libapt-inst2.0 libcurl3-gnutls
  libgirepository-1.0-1 librtmp1 python-apt-common python3-apt python3-dbus
  python3-gi python3-pycurl python3-software-properties
  software-properties-common unattended-upgrades xz-utils
0 upgraded, 17 newly installed, 0 to remove and 5 not upgraded.
Need to get 3615 kB of archives.
After this operation, 22.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] Abort.
The command '/bin/sh -c sudo apt-get install software-properties-common' returned a non-zero code: 1

I'm guessing that "Do you want to continue? [Y/n] Abort." needs to be answered "Y", but I don't know how to do this. I suspect I'm missing more though.

Needless to say my python script still doesn't run as it needs selenium:

Traceback (most recent call last):
  File "web-test.py", line 3, in <module>
    from selenium import webdriver

Can anyone tell me where I've gone wrong?

goose
  • 2,502
  • 6
  • 42
  • 69
  • 3
    Try using the `-y` flag with `sudo apt-get install`. Essentially, `sudo apt-get install -y software-properties-common`. This will assume yes for all install calls with `apt-get`. – Abdou Dec 24 '17 at 20:18
  • @Abdou Thanks for the input - that's gotten me further. I've now uncovered package dependency issues that I'm going to try to work through. – goose Dec 24 '17 at 21:31
  • What kind of dependency issues? `python` or OS packages? – Abdou Dec 24 '17 at 22:53

2 Answers2

0

You have identified the error correctly. You need to answer the question: Do you want to continue? [Y/n] with Y and continue. So, change your docker file as follows and add the flag -y

FROM selenium/standalone-chrome:latest
WORKDIR /usr/local/bin
RUN sudo apt-get -y update
RUN sudo apt-get install -y software-properties-common
RUN sudo apt-add-repository -y universe
RUN sudo apt-get install -y python3-pip
RUN pip3 install -r requirements.txt
RUN pip3 install .
RUN pip3 install -e .
COPY ./* ./

The -y flag can be used to assume YES for all apt installs. You need to add the -y flag, because docker build command cannot be run in an interactive mode. Hence, all interactions in the build process have to be added in the Dockerfile. (Read this answer)

Since you are gonna use pip3 you need to install it correctly. You are trying to install pip2. I have updated the your docker file accordingly. You need to use the below command to install pip3.

RUN sudo apt-get install -y python3-pip

Keet Sugathadasa
  • 11,595
  • 6
  • 65
  • 80
0

There are couple of things in your Dockerfile:

  • Avoid installing or using sudo as it has unpredictable TTY and signal-forwarding behavior that can cause problems. You can refer to Dockerfile Best Practice
RUN sudo apt-get update
RUN sudo apt-get install software-properties-common
RUN sudo apt-add-repository universe
RUN sudo apt-get install python-pip
  • The message
Need to get 3615 kB of archives.
After this operation, 22.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] Abort.
The command '/bin/sh -c sudo apt-get install software-properties-common' returned a non-zero code: 1

You need to add the flag -y to your Docker command above, so that during the Docker building, it can automatically say Yes for you.

Dinh Luong
  • 158
  • 1
  • 15