Reputation: 657
I'm trying to install a custom Python package to run in a Flask Server. The server will be in a Docker image. Therefore, I'm trying to do a manipulation of the sort of RUN pip install git+ssh://git@bitbucket.org:teamName/reponame.git@dev#egg=packageName
However, nothing that I have tried works.
I've tried the two formats that I've found:
1) git+ssh://git@bitbucket.org:teamName/reponame.git@dev#egg=packageName
2) git+ssh://bitbucket.org/team/reponame.git@dev#egg=packageName
Both of these technic give a similar error:
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
or
ssh: Could not resolve hostname bitbucket.org:TeamName: Name does not resolve
fatal: Could not read from remote repository.
or
root@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.
Even though my public key is set in BitBucket
Here is the Dockerfile:
Use an official Python runtime as a parent image
FROM python:3.6-alpine
#Preparation to pull from Github
ARG SSH_PRIVATE_KEY
RUN echo "Oh dang look at that ${SSH_PRIVATE_KEY}"
RUN apk update
RUN apk add --no-cache openssh \
git
RUN mkdir /root/.ssh/
RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
#install dependencies
RUN apk add --no-cache gcc \
bash \
tzdata \
g++ \
tiff-dev \
openssl \
poppler \
poppler-dev \
poppler-utils \
&& pip install --trusted-host pypi.python.org <THE_URL>
&& cp /usr/share/zoneinfo/America/that_place /etc/localtime \
&& echo "America/that_place" > /etc/timezone \
&& date
# Set the working directory to /app
WORKDIR ./my_dir
# Make port 5000 available to the world outside this container
EXPOSE 5000
#Remove SSH
RUN rm /root/.ssh/id_rsa
# Define environment variable
ENV NAME __main__
ENV FLASK_APP app/app.py
ENV FLASK_RUN_HOST 0.0.0.0
ENV GOOGLE_APPLICATION_CREDENTIALS ./resources/google/credentials.json
ENV GOOGLE_CLOUD_BUCKET_NAME bucket_name
# Run app.py when the container launches
CMD ["flask", "run"]
The SSH key is passed as an Argument to the build with $(cat ./ssh/id_rsa)
Upvotes: 6
Views: 7181
Reputation: 3900
You don't want to pass in an SSH key that way: it will end up inside the resulting image, so anyone who has access to the image will have access to your SSH key.
Options:
chmod 700 /root/.ssh
.Upvotes: 6