Почему docker-compose работает, а docker run - нет
У меня есть следующий файл local.yml
version: '3'
services:
celery-worker-default:
image: weapp_app:latest
container_name: weapp_celery-worker-default
command: celery worker -A WeApp -Q default -n default --loglevel=INFO
env_file:
- .env
volumes:
- .:/opt/python/current/app/
Когда я бегу
docker-compose -f local.yml up celery-worker-default
все работает отлично также работает как
docker-compose -f local.yml run celery-worker-default celery worker -A WeApp -Q default -n default --loglevel=INFO
Все работает нормально
Но если я пытаюсь выполнить с помощью docker следующую команду
docker run -v "$(pwd):/opt/python/current/app/" -w /opt/python/current/app --env-file .env weapp_app:latest celery worker -A WeApp -Q default -n default --loglevel=INFO
Я получаю эту ошибку
Error:
Unable to load celery application.
The module "WeApp was not found.
Я уже пробовал менять $(pwd) на локальный полный путь, но получаю ту же ошибку.
Другим способом я пытаюсь передать все значения окружения через командную строку с опцией -e и получаю ту же ошибку. Я пробовал без рабочей директории в опциях docker. Я пытаюсь открыть оболочку внутри контейнера и выполнить команду, но та же ошибка.
Во-первых, спасибо всем, кто прокомментировал и помог своими идеями
После комментария Таруна, я увидел проблему, но я думаю, что это хорошо, что все знают об этом.
Файл окружения (в моем случае .env) читается docker-compose иначе, чем docker.
Тогда при использовании docker-compose вы можете объявить значения, как
VAR="VALUE"
Но для docker вы должны объявить, как
VAR=VALUE
без кавычек.
Это сделало всю разницу в моем случае.
Еще раз спасибо всем, кто нашел время прочитать мой пост.