Portainer: [PREGUNTA] Uso con el registro de AWS ecr

Creado en 26 dic. 2017  ·  50Comentarios  ·  Fuente: portainer/portainer

Hola, estoy sufriendo la configuración del registro ECR en portainer.
Estoy usando una instancia EC2 con rol de IAM que tiene una política de acceso a ECR.
E instalé el asistente de credenciales de amazon ecr en todos los nodos de la ventana acoplable.
https://github.com/awslabs/amazon-ecr-credential-helper

La aplicación Portainer se encuentra en vivo en el nodo maestro del enjambre.
Me registré ecr. Sin embargo, el portainer siempre falla con imágenes ecr.

¿Como lo puedo hacer? ¿No hay soporte para ECR?

areregistry kinenhancement platforAWS

Comentario más útil

Me gustaría usar portainer para administrar mi clúster de enjambre que se ejecuta en AWS. Sin embargo, necesito portainer para poder acceder a mis imágenes de Docker almacenadas en ECR. Sin tal característica, no puedo usar portainer. :(

Todos 50 comentarios

Portainer solo admite autenticación mediante inicio de sesión / contraseña en el registro
El proyecto de credenciales rancher ecr se crea para habilitar esta función en rancher, mediante la actualización periódica de las credenciales.
Si desea utilizar imágenes ecr en portainer, debemos tener un comportamiento similar

Sí, creo que necesitaremos integrar una función similar al proyecto rancher-ecr-credentials para actualizar las credenciales automáticamente.

AWS IAM controla el acceso a un registro de ECR; un usuario de IAM debe solicitar credenciales temporales para el registro mediante la API de AWS; consulte http://rancher.com/using-amazon-container-registry-service/ para obtener más detalles.

Me gustaría usar portainer para administrar mi clúster de enjambre que se ejecuta en AWS. Sin embargo, necesito portainer para poder acceder a mis imágenes de Docker almacenadas en ECR. Sin tal característica, no puedo usar portainer. :(

Tengo un caso de uso similar en el que lanzo un enjambre en AWS y uso ECR para las imágenes (y CodeCommit como repositorio, que es relevante para un problema diferente). He aplicado un rol de IAM a mis instancias que otorga permisos de extracción a los repositorios (es decir, no tengo que ejecutar aws ecr get-login o docker login ). Mi flujo de trabajo para lanzar pilas era demasiado manual: ssh al nodo administrador, ejecuta un script de shell. Sin embargo, la autenticación del registro funcionó.

Anteriormente he usado https://github.com/dockersamples/docker-swarm-visualizer como una "GUI" pero quiero usar portainer como una capa de administración para mis pilas. Dado que ejecuto portainer como un servicio en mi enjambre, necesariamente se ejecuta como un contenedor, lo que coloca la carga de la autenticación del registro dentro del contenedor, y lo que funciona en el host no funciona en el contenedor.

Mi solución es la siguiente: envuelva la imagen de la ventana acoplable portainer en mi propio Dockerfile y use mi propia imagen en su lugar:

Dockerfile

FROM golang:1.9 as ecr-helper
RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login
WORKDIR /go/src/github.com/awslabs/amazon-ecr-credential-helper
RUN make

FROM busybox as busybox
RUN which busybox

FROM portainer/portainer:latest
ENV HOME=/
COPY --from=ecr-helper /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /bin/docker-credential-ecr-login
COPY config.json /.docker/config.json
COPY --from=busybox /bin/busybox /bin/busybox
RUN ["/bin/busybox","--install","-s","/bin"]

Esto me da una imagen de portainer que es un poco más grande pero que contiene el binario de ayuda de AWS ecr-login helper (y un busybox por si acaso para que pueda obtener un shell y hurgar). Dado el entorno HOME y el config.json (directamente desde el README de ecr helper, ver más abajo), puedo lanzar pilas desde portainer con imágenes de ECR.

config.json

{
    "credsStore": "ecr-login"
}

Su kilometraje puede variar, y hago +1 en una función que brindaría soporte para las credenciales de ecr rotativas en portainer, pero con los roles de IAM, mi solución podría ser útil para otros.

@tcjennings @deviantony desafortunadamente después de la actualización a 1.17.0, el inicio de sesión de AWS ya no funciona con el asistente de inicio de sesión de ecr. Si tengo tiempo, comprobaré qué ha cambiado por qué no se llama al binario cuando se inicia la extracción de la ventana acoplable. Reconstruí lo mismo con 1.16.5, que funciona perfectamente, pero con la última versión, el caché ecr nunca se llena y, como veo, no se llama al binario auxiliar cuando se ejecuta una implementación de pila.

@jgrasl que comienza con 1.17 Portainer está usando un archivo config.json específico ubicado en /config.json .

Si está utilizando el ejemplo de Dockerfile anterior, cambiar esta línea podría resolver su problema:

COPY config.json /config.json

Tenga en cuenta que la ubicación de config.json podría actualizarse después de resolver https://github.com/portainer/portainer/issues/1888

@deviantony Como veo en los cambios en la versión, el archivo json de configuración siempre se sobrescribe con main () -> initStackManager -> NewStackManager -> updateDockerCLIConfiguration. Funciona bien si sobrescribo los encabezados HTTP en el archivo json después de que se inicia el proceso de portainer, pero no puedo sobrescribirlo en el momento de la compilación.
Echaré un vistazo si puedo iniciar portainer con un script dentro del contenedor en lugar de con el punto de entrada / portainer para poder modificar el contenido del archivo json después de que se inició el proceso. Pero me temo que la información de los encabezados HTTP se almacena por una razón, por lo que realmente no debería eliminarla de ese archivo. No estoy usando el agente actualmente, pero puede ser un problema para otra persona.

Bien, intentaremos preservar el contenido del archivo config.json al resolver # 1888

@jgrasl quiere probar con portainer/portainer:pr1898 ?

@deviantony Con pr1898, el contenido de /config.json se conserva y se crea un nuevo config.json en / data. Aunque ese nuevo archivo config.json solo contiene el encabezado HTTP json, nada del tiempo de compilación copiado del archivo, por lo que el inicio de sesión de ecr no funciona con el asistente de cred.

@jgrasl bien con pr1898 necesitarías actualizar tu Dockerfile:

COPY config.json /data/config.json

@deviantony lo siento, lo olvidé. Ahora lo cambié, desafortunadamente, ahora los datos de mi configuración json no se conservan. En /data/config.json solo se encuentran los encabezados HTTP. Estoy mapeando el volumen de datos a un volumen externo a través de los volúmenes de la ventana acoplable para persistir en la configuración del controlador, ¿puede eso ser un problema?

@jgrasl , estás usando FROM portainer/portainer:pr1898 en tu Dockerfile, ¿verdad? ¿Algún config.json en ese volumen?

@deviantony sí usando la imagen de la

FROM golang:1.9 as ecr-helper                                                                                            
RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login                  
WORKDIR /go/src/github.com/awslabs/amazon-ecr-credential-helper                                                          
RUN make                                                                                                                 

FROM busybox as busybox                                                                                                  
RUN which busybox                                                                                                        

FROM portainer/portainer:pr1898                                                                                          
COPY --from=ecr-helper /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /bin/docker-credential-ecr-login
COPY config.json /data/config.json                                                                                       
COPY --from=busybox /bin/busybox /bin/busybox                                                                            
RUN ["/bin/busybox","--install","-s","/bin"]

Antes de iniciar el contenedor, eliminé el archivo config.json del volumen de datos montado, por lo que no debería haber ningún archivo json allí al inicio.

En realidad, montar un volumen para conservar los datos de Portainer asignará una carpeta en el disco a /data , lo que hará que la declaración COPY config.json /data/config.json inútil.

Estoy tratando de pensar en una forma de persistir los cambios del usuario en config.json antes de la implementación.

@jgrasl ¿Cómo conserva los datos de Portainer? ¿Utiliza un volumen con nombre? Si está utilizando un volumen con nombre Y el volumen está vacío (por ejemplo, recién creado), tendrá el config.json copiado del Dockerfile. Si está reutilizando un volumen de datos existente, creo que el archivo config.json no se copiará.

Podría ser problemático para las personas que actualizan su instancia de Portainer, aún buscando una mejor manera de mantener config.json cambios.

@deviantony no, solo usando un directorio mapeado con Docker Run, pero se puede nombrar, por supuesto, si es necesario.
-v /portainer/data/path/on/server:/data

@deviantony por ahora acabo de poner el archivo config.json en el directorio mapeado con la configuración de credsStore y el controlador de inicio. De esta manera, mi configuración se fusionó con los encabezados HTTP y el inicio de sesión de ecr funciona bien con el pr1898.

@jgrasl, esto también es lo que estoy pensando. Si alguien que usa esta solución alternativa quiere continuar usándolo y tiene datos de Portainer existentes, tendrá que poner su config.json en la raíz del directorio de datos existente. Si las personas están comenzando a usar esta solución alternativa y no tienen datos existentes, entonces se creará config.json en su directorio de datos.

No obstante, necesitaremos encontrar una solución real para esto más adelante.

@deviantony No sé si planea hacer algún otro soporte para el inicio de sesión de ecr, pero creo que el asistente de credenciales podría ser una solución final. Solo necesita el archivo de credenciales que ya usan todos los que usan aws cli, por lo que si el credsStore en el json de configuración pudiera incluirse de forma predeterminada en la imagen del portainer, no necesitaríamos colocar el archivo manualmente en el directorio persisted / data. solo proporcione el archivo de credenciales.
Pero también estoy completamente satisfecho con la solución actual, ya que funciona bien para mí.
¡Gracias por la solución!

Todavía no lo hemos pensado, bastante ocupado con otros temas en el cajero automático :-)

@deviantony Por supuesto que lo entiendo, tiempo de lanzamiento ocupado :) Puedo preparar un PR con lo que pensé y ustedes pueden decidir más tarde si desean fusionarlo para un lanzamiento posterior o no.

Probé todas las soluciones con el nuevo 1.17.0, puede ser porque estoy usando agentes, ¡no está funcionando! Intenté agregar config.json en /, en datos en .docker ...
¿Alguna idea de cómo ha funcionado?

@reineruhry vea las publicaciones de arriba.

Básicamente, use portainer/portainer:develop y copie su config.json en el volumen de datos (primero debe encontrar la carpeta en el disco) de Portainer.

@deviantony gracias! eso funcionó, estaba probando con el pr1898, ¿sabes si ahora es parte del 1.17.1?

@reineruhry sí, ahora es parte de 1.17.1

¿Tiene alguna idea para probar si funciona sin esperar 12 horas a que expire el token ECR?

@dawidpawlowski Puede iniciar sesión en el contenedor y eliminar el archivo /.ecr/cache.json que almacena las credenciales de inicio de sesión. Después de que ejecute una nueva implementación, debe volver a crear el archivo con credenciales de inicio de sesión válidas para ecr.

@jgrasl Probé tu solución y parece que no me funciona. A continuación, describí mi configuración de pila de ejemplo y todos los pasos que hice.

  1. Construí la imagen de la ventana acoplable de solución alternativa de portainer como escribiste en las publicaciones anteriores:
FROM golang:1.9 as ecr-helper                                                                                            
RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login                  
WORKDIR /go/src/github.com/awslabs/amazon-ecr-credential-helper                                                          
RUN make                                                                                                                 

FROM busybox as busybox                                                                                                  
RUN which busybox                                                                                                        

FROM portainer/portainer:1.17.1                                                                                         
COPY --from=ecr-helper /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /bin/docker-credential-ecr-login
COPY config.json /data/config.json                                                                                       
COPY --from=busybox /bin/busybox /bin/busybox                                                                            
RUN ["/bin/busybox","--install","-s","/bin"]
  1. Directorio vacío creado /path/on/server/portainer_data . Registrado manualmente en ECR usando aws-cli (para poder descargar mi imagen test_service de ECR) e implementar la pila usando el archivo docker-compose.yml (con 2 nodos en swarm):
version: '3.2'
services:
  test_service:
    image: 111111111.dkr.ecr.eu-west-1.amazonaws.com/test_service:1.0.10
    ports:
      - target: 80
        mode: host
    deploy:
      replicas: 1
      mode: replicated
      endpoint_mode: dnsrr

  agent:
    image: portainer/agent
    environment:
      AGENT_CLUSTER_ADDR: tasks.agent
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - agent_network
    deploy:
      mode: global

  portainer:
    image: workaround-portainer:test5
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    environment:
      AWS_ACCESS_KEY_ID: MY_ACCESS_KEY
      AWS_SECRET_ACCESS_KEY: MY_SECRET_ACCESS_KEY
    ports:
      - "9000:9000"
    volumes:
      - /path/on/server/portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay

volumes:
  portainer_data:
  1. Todo funciona correctamente. /path/on/server/portainer_data/config.json looks:
{"HttpHeaders":{"X-PortainerAgent-ManagerOperation":"1","X-PortainerAgent-PublicKey":"somePublicKey","X-PortainerAgent-Signature":"someSignature"}}

No hay config credsStore propiedad, así que reemplazo todo en /path/on/server/portainer_data/config.json con esto:

{
    "credsStore": "ecr-login"
}

y reinicie el contenedor portainer. Después de reiniciar /path/on/server/portainer_data/config.json ve:

{"HttpHeaders":{"X-PortainerAgent-ManagerOperation":"1","X-PortainerAgent-PublicKey":"somePublicKey","X-PortainerAgent-Signature":"someSignature"},"credsStore":"ecr-login"}

entonces, todo se ve bien.

  1. A continuación, inicié sesión en portainer http: // my-swam-manager-address : 9000

y actualice la versión test_service a alguna versión anterior 111111111.dkr.ecr.eu-west-1.amazonaws.com/test_service:1.0.9 . Funciona, pero cuando intento sacar alguna imagen de mi ECR usando http://my-swam-manager-address:9000/#/images no funciona. Funciona cuando descargo algunas imágenes de DockerHub.

Inicié sesión en el contenedor portainer y no hay un archivo /.ecr/cache.json.

¿Qué estoy haciendo mal? Puedo agregar que funciona exactamente igual sin una solución alternativa: puedo actualizar los servicios solo durante 12 horas después de implementar la pila.

@dawidpawlowski Ahora intenté extraer una imagen a través de imágenes de portainer, tampoco me funciona, pero para ser honesto, nunca usé esa función, ya que la pila extraerá automáticamente la imagen que necesita. Creo que extraer una imagen individual funciona de manera diferente. ¿Se crea el archivo stack cache.json si intenta implementar un archivo stack a través de http: // my-swam-manager-address : 9000 / # / stacks? Creo que tu configuración está bien.

@jgrasl @dawidpawlowski extraer una imagen a través de Portainer implica pasar las credenciales a la operación de extracción de la solicitud de la API de Docker: https://docs.docker.com/engine/api/v1.37/#section/Authentication

Portainer hace esto automáticamente al mirar la imagen que está tratando de extraer, automáticamente encontrará el registro asociado (siempre que se cree dentro de la aplicación) y pasará las credenciales.

Somos conscientes de que esto no funciona con los registros ECR.

Entonces, @jgrasl cuando implemento la pila usando http: // my-swam-manager-address : 9000 / # / stacks, entonces funciona, /.ecr/cache.json file se está recreando. Gracias por la ayuda.

Desafortunadamente, esta solución solo funciona para implementar una nueva pila. Cuando intenté actualizar la versión del servicio o escalar el servicio al nodo donde aún no se extrajo la imagen, la operación falla con el mensaje 'No existe tal imagen ...'. .ecr/cache.json archivo cache.json no se recrea.

Una solución que encontré si sus servidores no están en AWS pero está usando ECR, es actualizar el registro cada 12 horas a través de la API usando un trabajo cron.

Estoy usando httpie para ejecutar consultas HTTP desde la CLI y jq para analizar la respuesta

! / bin / sh

echo "obtener token de portainer"
PORTAINER_TOKEN = $ (http --ignore-stdin POST: 9000 / api / auth Nombre de usuario = nombre de usuario Contraseña = contraseña | jq -r '.jwt')

echo "obtener token aws"
AWS_TOKEN = $ (/ root / .local / bin / aws ecr get-Authorization-token --region sa-east-1 --output text --query AuthorizationData []. AuthorizationToken)

AWS_DECODED_PASSWORD = $ (echo $ AWS_TOKEN | base64 -d | corte -d: -f2)

echo "actualizar el registro"
http --ignore-stdin PUT: 9000 / api / registries / 1 "Autorización: Portador $ PORTAINER_TOKEN" nombre de usuario = contraseña de AWS = $ AWS_DECODED_PASSWORD Autenticación: = verdadero

__ Solución alternativa propuesta__:

Cree una imagen con el siguiente punto de entrada (y las dependencias necesarias como awscli instalado):

eval $(aws ecr get-login --no-include-email --region eu-west-2)
docker pull <image_needed_from_ecr_1>
docker pull <image_needed_from_ecr_2>
...

Por supuesto, debe exponer AWS_SECRET_ACCESS_KEY y AWS_ACCESS_KEY_ID vars a la imagen anterior (y hacerla disponible a través de template.json )

Agregar:

  deploy:
     restart_policy: none

Al servicio de la imagen anterior;

Agregar:

depends_on:
   service_above

a los servicios en docker-compose.yml usando las imágenes ecr anteriores que deben estar disponibles localmente primero.

Feliz tirando de ecr

@pkaramol, ¿cómo se supone que actualizará el token de autenticación de AWS cuando expira después de 12 horas? Tendría que reiniciar Portainer cada vez que caduquen sus tokens.

He puesto la solución @dawidpawlowski en una compilación automática aquí

Utilizo roles de IAM en las máquinas, pero AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY funcionará igual

Solo me funciona si estoy implementando una pila usando protainer, ejecutar un servicio directamente con una imagen ECR privada no parece funcionar.

He podido crear el registro en AWS usando https://github.com/johnvmt/portainer-ecr-credentials pero incluso si las credenciales están ahí, obtengo No such image tratando de usarlo en un servicio. y / o una pila

Actualización: mal, escribí la región de AWS incorrecta :) ahora parece estar funcionando

He podido crear el registro en AWS usando https://github.com/johnvmt/portainer-ecr-credentials pero incluso si las credenciales están ahí, obtengo No such image tratando de usarlo en un servicio. y / o una pila

Actualización: mal, escribí la región de AWS incorrecta :) ahora parece estar funcionando

Modifiqué el archivo de nodo index.js de este contenedor para la configuración de proxy de mi empresa y lo hice funcionar. Bastante hábil, se ejecuta cada 11 horas para extraer nuevas credenciales ECR y actualiza el registro de portainer con la nueva credencial.

https://github.com/awslabs/amazon-ecr-credential-helper

Esto podría ser de ayuda para algunas personas.

Hola, @deviantony ,
¿Se está teniendo esto en cuenta para una de las futuras versiones de portainer? Sé que mencionaste que esto no se estaba avanzando debido al enfoque en otros temas en mayo de 2018.

Básicamente usamos ECR para almacenar todas nuestras imágenes y queremos poder extraer las imágenes localmente (y eventualmente construir contenedores). La solución actual no es compatible con las extracciones normales de imágenes de la ventana acoplable que utilizan plantillas de aplicaciones o componen la ventana acoplable. La solución solo funciona con la implementación de la pila de la ventana acoplable (la ventana acoplable se compone en enjambre) como tal vez sepa.

Principalmente, solo usamos docker-compose up y docker runs (docker pull en segundo plano cuando el contenedor no existe localmente) para el desarrollo de nuestra aplicación y el soporte nativo para ECR de portainer sería excelente, ya que necesitaríamos extraer imágenes nosotros mismos externamente antes. haciendo un docker-compose up o docker run (plantillas de aplicaciones en portainer).

Solo estoy tratando de obtener un estado de esto para tomar la decisión de usar portainer o no.

¡Gracias!

+1 en el comentario anterior, ¡gracias!

¡Solucione eso pronto!

Ejemplo de trabajo completo como lo he intentado recientemente:

$ ls .

Dockerfile
config.json
  • Dockerfile
FROM golang:1.9 as ecr-helper
RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login
WORKDIR /go/src/github.com/awslabs/amazon-ecr-credential-helper
RUN make

FROM busybox as busybox
RUN which busybox

FROM portainer/portainer:1.24.1
ENV HOME=/
COPY --from=busybox /bin/busybox /bin/busybox
RUN ["/bin/busybox","--install","-s","/bin"]
COPY --from=ecr-helper /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /bin/docker-credential-ecr-login
COPY config.json /.docker/config.json
  • config.json
{
    "credsStore": "ecr-login"
}
  • Crea la imagen personalizada de portainer
docker build -t portainer-custom:latest .
  • Implementar portainer con el medio ambiente:
version: "3.3"

services:
  portainer:
    image: portainer-custom:latest
    environment: 
      AWS_ACCESS_KEY_ID:
      AWS_SECRET_ACCESS_KEY:
  • Nota importante que NO PUEDE extraer de la interfaz de usuario de portainer. Pero en realidad puede implementar una pila de la que podrá extraer las imágenes. AWS ECR.
  • En caso de que quiera probar, ingrese portainer console debajo de Containers > portainer container :
/ # ./docker pull <ECR Repo/image>

Sin embargo, realmente espero que Portainer pueda admitir esta función, tal vez tirando usando un comando remoto o usando un contenedor personalizado (como el anterior pero no específico del controlador).

Ejemplo de trabajo completo como lo he intentado recientemente:

$ ls .

Dockerfile
config.json
  • Dockerfile
FROM golang:1.9 as ecr-helper
RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login
WORKDIR /go/src/github.com/awslabs/amazon-ecr-credential-helper
RUN make

FROM busybox as busybox
RUN which busybox

FROM portainer/portainer:1.24.1
ENV HOME=/
COPY --from=busybox /bin/busybox /bin/busybox
RUN ["/bin/busybox","--install","-s","/bin"]
COPY --from=ecr-helper /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /bin/docker-credential-ecr-login
COPY config.json /.docker/config.json
  • config.json
{
    "credsStore": "ecr-login"
}
  • Crea la imagen personalizada de portainer
docker build -t portainer-custom:latest .
  • Implementar portainer con el medio ambiente:
version: "3.3"

services:
  portainer:
    image: portainer-custom:latest
    environment: 
      AWS_ACCESS_KEY_ID:
      AWS_SECRET_ACCESS_KEY:
  • _Big note_ NO PUEDE extraer de la interfaz de usuario de portainer. Pero en realidad puede implementar una pila de la que podrá extraer las imágenes. AWS ECR.
  • En caso de que quiera probar, ingrese portainer console debajo de Containers > portainer container :
/ # ./docker pull <ECR Repo/image>

Sin embargo, realmente espero que Portainer pueda admitir esta función, tal vez tirando usando un comando remoto o usando un contenedor personalizado (como el anterior pero no específico del controlador).

¿Ha probado esto con Portainer 2.0?

Ejemplo de trabajo completo como lo he intentado recientemente:

$ ls .

Dockerfile
config.json
  • Dockerfile
FROM golang:1.9 as ecr-helper
RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login
WORKDIR /go/src/github.com/awslabs/amazon-ecr-credential-helper
RUN make

FROM busybox as busybox
RUN which busybox

FROM portainer/portainer:1.24.1
ENV HOME=/
COPY --from=busybox /bin/busybox /bin/busybox
RUN ["/bin/busybox","--install","-s","/bin"]
COPY --from=ecr-helper /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/local/docker-credential-ecr-login /bin/docker-credential-ecr-login
COPY config.json /.docker/config.json
  • config.json
{
    "credsStore": "ecr-login"
}
  • Crea la imagen personalizada de portainer
docker build -t portainer-custom:latest .
  • Implementar portainer con el medio ambiente:
version: "3.3"

services:
  portainer:
    image: portainer-custom:latest
    environment: 
      AWS_ACCESS_KEY_ID:
      AWS_SECRET_ACCESS_KEY:
  • _Big note_ NO PUEDE extraer de la interfaz de usuario de portainer. Pero en realidad puede implementar una pila de la que podrá extraer las imágenes. AWS ECR.
  • En caso de que quiera probar, ingrese portainer console debajo de Containers > portainer container :
/ # ./docker pull <ECR Repo/image>

Sin embargo, realmente espero que Portainer pueda admitir esta función, tal vez tirando usando un comando remoto o usando un contenedor personalizado (como el anterior pero no específico del controlador).

¿Ha probado esto con Portainer 2.0?

Lo probé con la última versión de Portainer y funciona bien. Me las arreglé para adaptarlo e hice un pequeño repositorio usando la respuesta de @xgenvn

https://github.com/filadd/ecr_portainer

Podemos usar httpd server para exponer una api para ejecutar ./docker pull <ECR Repo/image> . (Me ayudó con CI / CD)
Implementación: https://github.com/mek97/portainer-ecr

Soy nuevo en portainer en primer lugar, tnx es increíble.

Otra forma que me funcionó es agregar el registro de la manera habitual con el nombre de usuario AWS y la contraseña como resultado de aws ecr get-login-password . Sé que necesitará una actualización, pero funciona correctamente en la primera instancia.

Usando la última versión de portainer-ce.

Estamos planeando agregar soporte para el registro de AWS ECR a finales de este año, esto actualmente está previsto para el segundo trimestre de 2021.

¿Fue útil esta página
0 / 5 - 0 calificaciones