Estoy usando la sugerencia de esta publicación para implementar los secretos de Docker para poder usar una clave SSH local para autenticar el acceso a Github para mis contenedores. Estoy en MacOS y no uso Docker swarm. He aquí mi arreglo:
docker-compose.yml
version: '3.1' services: [servicename]: secrets: - ssh_private_key [...] secrets: ssh_private_key: file: ~/.ssh/id_rsaDockerfile
FROM python:3.7 as intermediate RUN mkdir /root/.ssh/ RUN ln -s /run/secrets/ssh_private_key /root/.ssh/id_rsa RUN touch /root/.ssh/known_hosts RUN ssh-keyscan github.com >> /root/.ssh/known_hosts COPY requirements_private_repos.txt ./ RUN pip install --no-cache-dir -r requirements_private_repos.txt Cuando intento ejecutar docker-compose build y usar la clave SSH para extraer datos de repositorios remotos privados, aparece el siguiente error:
Permission denied (publickey). fatal: Could not read from remote repository. Puedo acceder de forma remota a la imagen de la ventana acoplable y ver que el secreto se crea y se completa en /run/secrets/ssh_private_key .
¿Por qué el enlace no funciona cuando se usa en Dockerfile? Si Docker Secrets no es el método correcto, ¿hay una mejor manera de compartir una clave SSH de MacOS a Docker?
No puede usar secretos de tiempo de ejecución en la frase de compilación. Puede usar compilaciones de varias etapas para copiar el secreto en la imagen para que se descarte en la siguiente etapa o usar los nuevos secretos de tiempo de compilación que se introdujeron en Docker 18.09.
Para el método de etapas múltiples, puede hacer lo siguiente:
FROM python:3.7 as intermediate COPY id_rsa /root/.ssh/id_rsa # your private key must be on the build context RUN touch /root/.ssh/known_hosts RUN ssh-keyscan github.com >> /root/.ssh/known_hosts COPY requirements_private_repos.txt ./ RUN pip install --no-cache-dir -r requirements_private_repos.txt FROM python:3.7 COPY --from=intermediate XXXX YYYY # copy your modules, this image won't have the ssh private keyPara el nuevo método, puede hacer lo siguiente, no he probado este método yo mismo (se necesita un agente ssh que se ejecute en el host):
FROM python:3.7 as intermediate RUN touch /root/.ssh/known_hosts RUN ssh-keyscan github.com >> /root/.ssh/known_hosts COPY requirements_private_repos.txt ./ RUN --mount=type=ssh pip install --no-cache-dir -r requirements_private_repos.txtLuego construye tu imagen con:
docker build --ssh default . -t myimageConsulte la documentación para obtener más información sobre el nuevo método: