Dmitriy Lunev
Dmitriy Lunev

Reputation: 227

docker compose pull from AWS ECR doesn't work

I have problem with docker-compose (1) and docker compose (2) pull. When I try to pull images from direct repository (I use ECR), both commands (sudo docker-compose -f docker-compose.prod.yml pull and sudo docker compose -f docker-compose.prod.yml pull) give me following output:

 $ export DOCKER_REGISTRY= {{ secret path to AWS ECP }}
 $ $DOCKER_REGISTRY 
{{ secret path to AWS ECP }}
 $ sudo docker compose -f docker-compose.prod.yml pull
WARN[0000] The "DOCKER_REGISTRY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DOCKER_REGISTRY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DOCKER_REGISTRY" variable is not set. Defaulting to a blank string. 
[+] Running 0/0
 ⠋ cron Pulling                                                                                         0.0s
 ⠿ db Error                                                                                             0.0s
 ⠋ traefik Pulling                                                                                      0.0s
 ⠋ web Pulling                                                                                          0.0s
WARNING: Some service image(s) must be built from source by running:
    docker compose build cron traefik web
invalid reference format
 $ sudo docker-compose -f docker-compose.prod.yml pull
WARNING: The DOCKER_REGISTRY variable is not set. Defaulting to a blank string.
Pulling db ... done

In line 1 I export DOCKER_REGISTRY variable, that is using in docker-compose.prod.yml. In line 2 I check this variable and then run both of above commands. (2) sees all needed images in yml file, but can't pull them, because it doesn't see DOCKER_REGISTRY variable. (1) sees only db.

Part of prod.yml file:

version: '3.7'
services:
  web:
    container_name: web
    image: ${DOCKER_REGISTRY}/me-project_web:latest
    build:
      context: ./MoreEnergy
      dockerfile: Dockerfile.prod
    restart: always
    env_file: ./.env.prod
    entrypoint: sh ./entrypoint.sh
    command: gunicorn MoreEnergy.wsgi:application --bind 0.0.0.0:8000
    expose:
      - 8000
    volumes:
      - static_volume:/home/app/web/staticfiles
      - media_volume:/home/app/web/mediafiles
    depends_on:
      - db
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.web.rule=Host(`lunev.dmitrium.com`)"
      - "traefik.http.routers.web.tls=true"
      - "traefik.http.routers.web.tls.certresolver=letsencrypt"

I have .env.prod file with all needed variables too, but (1) and (2) don't see DOCKER_REGISTRY variable anyway.

What should I do? I'm trying to implement CI/CD using GitHub actions. In current state, docker-compose can build and push all my images to AWS ECR, but can't pull them back.

Upvotes: 0

Views: 6569

Answers (1)

Dmitriy Lunev
Dmitriy Lunev

Reputation: 227

The answer was utterly stupid and simple. 10 minutes before asking the question, I've successfully started the containers, pulled by docker pull command before, but forgot it, because detail of success was not conspicuous. I've done this by NOT using this command with sudo. Yes, it is. sudo docker compose -f docker-compose.prod.yml up and docker compose -f docker-compose.prod.yml up (and pull) commands run correct only if you do it without root access.

Maybe it's not a common solution, and in other cases sudo is required, but not in mine.

Upvotes: 2

Related Questions