rahulbha
(Rahulbha)
May 2, 2025, 1:22pm
1
We have a Python DJango based application which I am trying to build using docker compose command. But I am running into the below error:
failed to solve: failed to read dockerfile: open Dockerfile: no such file or directory
The Dockerfile exists in the same folder where I am running the command from. This is the command I am running:
docker compose up -d --build
My docker version is 28.1.1. I tried running it on Windows machine as well as Ubuntu 24.04 LTS, but having the same error.
Can someone please help regarding this?
meyay
(Metin Y.)
May 2, 2025, 2:44pm
2
Please share the content of your compose file, and the output of docker ls , so we can see if the file is actually named Dockerfile and aligns with what you configured in the compose file.
rahulbha
(Rahulbha)
May 2, 2025, 3:28pm
3
Hi, on running the ‘docker ls’ command I get an error:
docker: unknown command: docker ls
Run ‘docker --help’ for more information
Below is content of the compose file:
version: "3.8"
services:
web:
build: ./
command: ./init-scripts/web-dev.sh
expose:
- 8000
ports:
- 8050:8050
volumes:
- ./:/app
- ${BATCH_INPUT_PATH}:/batches
environment:
- SECRET_KEY=${SECRET_KEY}
- DEBUG=${DEBUG}
- ALLOWED_HOSTS=${ALLOWED_HOSTS}
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
- AUTO_MIGRATE=${AUTO_MIGRATE}
- DB_NAME=${DB_NAME}
- PGBOUNCER_HOST=${PGBOUNCER_HOST}
- PGBOUNCER_PORT=${PGBOUNCER_PORT}
- DB_PORT=${DB_PORT}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- RABBITMQ_HOST=${RABBITMQ_HOST}
- RABBITMQ_PORT=${RABBITMQ_PORT}
- RABBITMQ_USERNAME=${RABBITMQ_USERNAME}
- RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
- DOCBUILDER_API_URL=${DOCBUILDER_API_URL}
- UTILITY_API_URL=${UTILITY_API_URL}
- ICAP_API_URL=${ICAP_API_URL}
- FRONTEND_URL=${FRONTEND_URL}
- DEFINITION_VERSIONS=${DEFINITION_VERSIONS}
- DEFAULT_DEFINITION_VERSION=${DEFAULT_DEFINITION_VERSION}
- DATACAP_API_BASE_URL=${DATACAP_API_BASE_URL}
- DATACAP_APP=${DATACAP_APP}
- DATACAP_USER=${DATACAP_USER}
- DATACAP_PASSWORD=${DATACAP_PASSWORD}
- DATACAP_STATION=${DATACAP_STATION}
- DATACAP_JOB=${DATACAP_JOB}
- DATACAP_MILI_JOB=${DATACAP_MILI_JOB}
- ENABLE_LDAP_AUTH=${ENABLE_LDAP_AUTH}
- LDAP_SERVER_ADDRESS=${LDAP_SERVER_ADDRESS}
- LDAP_SERVER_PORT=${LDAP_SERVER_PORT}
- LDAP_BIND_DN=${LDAP_BIND_DN}
- LDAP_BIND_PASSWORD=${LDAP_BIND_PASSWORD}
- LDAP_USER_SEARCH_DN=${LDAP_USER_SEARCH_DN}
- LDAP_GROUP_SEARCH_DN=${LDAP_GROUP_SEARCH_DN}
- LDAP_AUTH_USER_GROUP=${LDAP_AUTH_USER_GROUP}
- LDAP_AUTH_SUPERUSER_GROUP=${LDAP_AUTH_SUPERUSER_GROUP}
- SEND_EMAILS=${SEND_EMAILS}
- EMAIL_HOST=${EMAIL_HOST}
- EMAIL_PORT=${EMAIL_PORT}
- EMAIL_HOST_USER=${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
- EMAIL_USE_TLS=${EMAIL_USE_TLS}
- CLASSIFIER_API_URL=${CLASSIFIER_API_URL}
- MAX_RETRY=${MAX_RETRY}
- RETRY_INTERVAL=${RETRY_INTERVAL}
- SERVER_IP=${SERVER_IP}
- SAVE_TRANSACTION_LOG=${SAVE_TRANSACTION_LOG}
- DATACAP_CALLBACK_AWAITING=${DATACAP_CALLBACK_AWAITING}
depends_on:
- pgbouncer
- redis
- rabbitmq
extra_hosts:
- "localhost:host-gateway"
daphne:
build: ./
command: daphne -b 0.0.0.0 -p 8001 app.asgi:application
expose:
- 8001
environment:
- SECRET_KEY=${SECRET_KEY}
- DEBUG=${DEBUG}
- ALLOWED_HOSTS=${ALLOWED_HOSTS}
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
- AUTO_MIGRATE=${AUTO_MIGRATE}
- DB_NAME=${DB_NAME}
- PGBOUNCER_HOST=${PGBOUNCER_HOST}
- PGBOUNCER_PORT=${PGBOUNCER_PORT}
- DB_PORT=${DB_PORT}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- RABBITMQ_HOST=${RABBITMQ_HOST}
- RABBITMQ_PORT=${RABBITMQ_PORT}
- RABBITMQ_USERNAME=${RABBITMQ_USERNAME}
- RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
- DOCBUILDER_API_URL=${DOCBUILDER_API_URL}
- UTILITY_API_URL=${UTILITY_API_URL}
- ICAP_API_URL=${ICAP_API_URL}
- FRONTEND_URL=${FRONTEND_URL}
- DATACAP_API_BASE_URL=${DATACAP_API_BASE_URL}
- DEFINITION_VERSIONS=${DEFINITION_VERSIONS}
- DEFAULT_DEFINITION_VERSION=${DEFAULT_DEFINITION_VERSION}
depends_on:
- web
extra_hosts:
- "localhost:host-gateway"
worker:
build: ./
command: ./init-scripts/worker.sh
volumes:
- ./:/app
- ${BATCH_INPUT_PATH}:/batches
- ${SCRIPTS_INPUT_PATH}:/scripts
environment:
- SECRET_KEY=${SECRET_KEY}
- DEBUG=${DEBUG}
- ALLOWED_HOSTS=${ALLOWED_HOSTS}
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
- AUTO_MIGRATE=${AUTO_MIGRATE}
- DB_NAME=${DB_NAME}
- PGBOUNCER_HOST=${PGBOUNCER_HOST}
- PGBOUNCER_PORT=${PGBOUNCER_PORT}
- DB_PORT=${DB_PORT}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- RABBITMQ_HOST=${RABBITMQ_HOST}
- RABBITMQ_PORT=${RABBITMQ_PORT}
- RABBITMQ_USERNAME=${RABBITMQ_USERNAME}
- RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
- DOCBUILDER_API_URL=${DOCBUILDER_API_URL}
- UTILITY_API_URL=${UTILITY_API_URL}
- ICAP_API_URL=${ICAP_API_URL}
- FRONTEND_URL=${FRONTEND_URL}
- DEFINITION_VERSIONS=${DEFINITION_VERSIONS}
- DEFAULT_DEFINITION_VERSION=${DEFAULT_DEFINITION_VERSION}
- DATACAP_API_BASE_URL=${DATACAP_API_BASE_URL}
- DATACAP_APP=${DATACAP_APP}
- DATACAP_USER=${DATACAP_USER}
- DATACAP_PASSWORD=${DATACAP_PASSWORD}
- DATACAP_STATION=${DATACAP_STATION}
- DATACAP_JOB=${DATACAP_JOB}
- DATACAP_MILI_JOB=${DATACAP_MILI_JOB}
- SEND_EMAILS=${SEND_EMAILS}
- EMAIL_HOST=${EMAIL_HOST}
- EMAIL_PORT=${EMAIL_PORT}
- EMAIL_HOST_USER=${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
- EMAIL_USE_TLS=${EMAIL_USE_TLS}
- CLASSIFIER_API_URL=${CLASSIFIER_API_URL}
- MOCK_ASSEMBLY_APIS=${MOCK_ASSEMBLY_APIS}
- CUSTOMS_API_BASE_URL=${CUSTOMS_API_BASE_URL}
- DSC_API_BASE_URL=${DSC_API_BASE_URL}
- DSC_API_CLIENT_ID=${DSC_API_CLIENT_ID}
- DSC_API_CLIENT_SECRET=${DSC_API_CLIENT_SECRET}
- FREIGHT_API_CLIENT_ID=${FREIGHT_API_CLIENT_ID}
- FREIGHT_API_CLIENT_SECRET=${FREIGHT_API_CLIENT_SECRET}
- CUSTOMS_API_KEY=${CUSTOMS_API_KEY}
- EDM_API_KEY=${EDM_API_KEY}
- MAX_RETRY=${MAX_RETRY}
- RETRY_INTERVAL=${RETRY_INTERVAL}
- TIMESTAMP_API_BASE_URL=${TIMESTAMP_API_BASE_URL}
- DHL_API_KEY=${DHL_API_KEY}
- SERVER_IP=${SERVER_IP}
- USA_API_BASE_URL=${USA_API_BASE_URL}
- USA_API_KEY=${USA_API_KEY}
- SAVE_TRANSACTION_LOG=${SAVE_TRANSACTION_LOG}
- FCM_CLIENT_ID=${FCM_CLIENT_ID}
- FCM_CLIENT_SECRET=${FCM_CLIENT_SECRET}
depends_on:
- web
extra_hosts:
- "localhost:host-gateway"
deploy:
replicas: ${WORKER_REPLICAS}
celery:
build: ./
command: ./init-scripts/celery.sh
volumes:
- ./:/app
- ${BATCH_INPUT_PATH}:/batches
environment:
- SECRET_KEY=${SECRET_KEY}
- DEBUG=${DEBUG}
- ALLOWED_HOSTS=${ALLOWED_HOSTS}
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
- AUTO_MIGRATE=${AUTO_MIGRATE}
- DB_NAME=${DB_NAME}
- PGBOUNCER_HOST=${PGBOUNCER_HOST}
- PGBOUNCER_PORT=${PGBOUNCER_PORT}
- DB_PORT=${DB_PORT}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- RABBITMQ_HOST=${RABBITMQ_HOST}
- RABBITMQ_PORT=${RABBITMQ_PORT}
- RABBITMQ_USERNAME=${RABBITMQ_USERNAME}
- RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
- DOCBUILDER_API_URL=${DOCBUILDER_API_URL}
- UTILITY_API_URL=${UTILITY_API_URL}
- ICAP_API_URL=${ICAP_API_URL}
- FRONTEND_URL=${FRONTEND_URL}
- DATACAP_API_BASE_URL=${DATACAP_API_BASE_URL}
- DEFINITION_VERSIONS=${DEFINITION_VERSIONS}
- DEFAULT_DEFINITION_VERSION=${DEFAULT_DEFINITION_VERSION}
depends_on:
- web
extra_hosts:
- "localhost:host-gateway"
celery_beat:
build: ./
command: ./init-scripts/celery_beat.sh
volumes:
- ./:/app
environment:
- SECRET_KEY=${SECRET_KEY}
- DEBUG=${DEBUG}
- ALLOWED_HOSTS=${ALLOWED_HOSTS}
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
- AUTO_MIGRATE=${AUTO_MIGRATE}
- DB_NAME=${DB_NAME}
- PGBOUNCER_HOST=${PGBOUNCER_HOST}
- PGBOUNCER_PORT=${PGBOUNCER_PORT}
- DB_PORT=${DB_PORT}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- RABBITMQ_HOST=${RABBITMQ_HOST}
- RABBITMQ_PORT=${RABBITMQ_PORT}
- RABBITMQ_USERNAME=${RABBITMQ_USERNAME}
- RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
- DOCBUILDER_API_URL=${DOCBUILDER_API_URL}
- UTILITY_API_URL=${UTILITY_API_URL}
- ICAP_API_URL=${ICAP_API_URL}
- FRONTEND_URL=${FRONTEND_URL}
- DATACAP_API_BASE_URL=${DATACAP_API_BASE_URL}
- DEFINITION_VERSIONS=${DEFINITION_VERSIONS}
- DEFAULT_DEFINITION_VERSION=${DEFAULT_DEFINITION_VERSION}
depends_on:
- web
extra_hosts:
- "localhost:host-gateway"
nginx:
build:
context: ./nginx
args:
CONFIG_FILE: nginx.dev.conf.template
ports:
- ${PORT}:8080
volumes:
- ${BATCH_INPUT_PATH}:/app/batches
environment:
- WEB_HOST=web:8000
- DAPHNE_HOST=daphne:8001
depends_on:
- web
postgres:
build:
context: ./postgres
expose:
- 5432
ports:
- ${DB_HOST_BIND_PORT}:5432
volumes:
- postgres_data:/var/lib/postgresql/data
- ./postgres/postgresql.conf:/etc/postgresql/postgresql.conf:ro
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USERNAME}
- POSTGRES_PASSWORD=${DB_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME} -d ${DB_NAME} -h localhost"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
command: postgres -c config_file=/etc/postgresql/postgresql.conf
pgbouncer:
build:
context: ./pgbouncer
ports:
- "${PGBOUNCER_PORT}:6432"
environment:
- POSTGRESQL_HOST=${DB_HOST}
- POSTGRESQL_PORT=${DB_PORT}
- POSTGRESQL_DATABASE=${DB_NAME}
- POSTGRESQL_USERNAME=${DB_USERNAME}
- POSTGRESQL_PASSWORD=${DB_PASSWORD}
- PGBOUNCER_DATABASE=${DB_NAME}
- PGBOUNCER_PORT=${PGBOUNCER_PORT}
- PGBOUNCER_LISTEN_ADDRESS=0.0.0.0
- PGBOUNCER_AUTH_TYPE=trust
- PGBOUNCER_POOL_MODE=${PGBOUNCER_POOL_MODE}
- PGBOUNCER_MAX_CLIENT_CONN=${PGBOUNCER_MAX_CLIENT_CONN}
- PGBOUNCER_DEFAULT_POOL_SIZE=${PGBOUNCER_DEFAULT_POOL_SIZE}
- PGBOUNCER_MIN_POOL_SIZE=${PGBOUNCER_MIN_POOL_SIZE}
- PGBOUNCER_RESERVE_POOL_SIZE=${PGBOUNCER_RESERVE_POOL_SIZE}
- PGBOUNCER_MAX_DB_CONNECTIONS=${PGBOUNCER_MAX_DB_CONNECTIONS}
depends_on:
postgres:
condition: service_healthy
redis:
build:
context: ./redis
ports:
- ${REDIS_PORT}:6379
volumes:
- redis_data:/data
rabbitmq:
build:
context: ./rabbitmq
ports:
- ${RABBITMQ_PORT}:5672
- ${RABBITMQ_DASHBOARD_PORT}:15672
volumes:
- rabbitmq_data:/var/lib/rabbitmq/
environment:
- RABBITMQ_DEFAULT_USER=${RABBITMQ_USERNAME}
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
hostname: ${RABBITMQ_SYSTEM_HOSTNAME}
volumes:
postgres_data:
redis_data:
rabbitmq_data:
meyay
(Metin Y.)
May 2, 2025, 4:23pm
4
rahulbha:
Hi, on running the ‘docker ls’ command I get an error:
docker: unknown command: docker ls
Run ‘docker --help’ for more information
My bad, it should have been just ls.
meyay
(Metin Y.)
May 2, 2025, 4:33pm
5
rahulbha:
build: ./
I am not sure how much sense it makes that multiple services use the same Dockerfile from the current folder to build an image. I am not sure if using ./ of the context is correct, or only . should be used.
Also, we know now that in the folder where the compose file is located, a file named Dockerfile (exactly written like that) is expected to exist. At least that’s what the services web, daphne, worker,celery and celery_beat expect to find.
So either the file is not named Dockerfile, or using ./ as context is the problem.
rahulbha
(Rahulbha)
May 5, 2025, 9:01am
6
Hi, please find attached the output of the ls command. Also I modified the docker-compose.yaml to use build . instead of ./ but still getting the same error.
rahulbha
(Rahulbha)
May 5, 2025, 12:46pm
7
I was able to resolve the issue. Some of the services were missing the dockerfile inside the folders. Adding the dockerfiles resolved the issue
Make sure that you DO NOT have Dockerfile in your .gcloudignore file, or equivalent.