DEV Community

Janak Shrestha
Janak Shrestha

Posted on

Resolve Docker Compose Issues

The Nautilus DevOps team is working to deploy one of the applications on App Server 2 in Stratos DC. Due to a misconfiguration in the docker compose file, the deployment is failing. We would like you to take a look into it to identify and fix the issues. More details can be found below:
a. docker-compose.yml file is present on App Server 2 under /opt/docker directory.

b. Try to run the same and make sure it works fine.

c. Please do not change the container names being used. Also, do not update or alter any other valid config settings in the compose file or any other relevant data that can cause app failure.

Note: Please note that once you click on FINISH button all existing running/stopped containers will be destroyed, and your compose will be run.


Connect to App Server 2

ssh steve@stapp02
sudo -i
Enter fullscreen mode Exit fullscreen mode

Password for steve: Am3ric@


Inspect the Compose Directory

cd /opt/docker
ls -la
Enter fullscreen mode Exit fullscreen mode

Output:

total 20
drwxrwxrwx 3 root root 4096 Oct 28 09:14 .
drwxr-xr-x 1 root root 4096 Oct 28 09:14 ..
drwxrwxrwx 2 root root 4096 Oct 28 09:14 app
-rw-r--r-- 1 root root  272 Oct 28 09:14 docker-compose.yml
Enter fullscreen mode Exit fullscreen mode

The build context contains an app/ directory and the compose file.


View the Original Compose File

cat /opt/docker/docker-compose.yml
Enter fullscreen mode Exit fullscreen mode

Original content:

name: myapp

services:
    web:
        image: ./app
        container_name: python
        port:
            - "5000:5000"
        volumes:
            - ./app:/code
        depends_on:
            - redis
    redis_app:
        image: redis
        container_name: redis
Enter fullscreen mode Exit fullscreen mode

Inspect the App Directory

ls -la /opt/docker/app
Enter fullscreen mode Exit fullscreen mode

Output:

total 20
drwxrwxrwx 2 root root 4096 Oct 28 09:14 .
drwxrwxrwx 3 root root 4096 Oct 28 09:14 ..
-rw-r--r-- 1 root root  114 Oct 28 09:14 Dockerfile
-rw-r--r-- 1 root root  339 Oct 28 09:14 app.py
-rw-r--r-- 1 root root   11 Oct 28 09:14 requirements.txt
Enter fullscreen mode Exit fullscreen mode

The app/ directory contains a Dockerfile, app.py, and requirements.txt, confirming it is a valid build context.


Issues Identified

Line Issue Fix
image: ./app image expects an image name, not a path; should use build Change to build: ./app
port: Invalid key; should be ports Change to ports
depends_on: - redis References a service named redis, but the service is named redis_app Change to redis_app

Container names python and redis remain unchanged as required.


Fix the Compose File

Edit the file:

vi /opt/docker/docker-compose.yml
Enter fullscreen mode Exit fullscreen mode

Corrected content:

name: myapp

services:
    web:
        build: ./app
        container_name: python
        ports:
            - "5000:5000"
        volumes:
            - ./app:/code
        depends_on:
            - redis_app
    redis_app:
        image: redis
        container_name: redis
Enter fullscreen mode Exit fullscreen mode

Validate the Compose File

cd /opt/docker
docker compose config
Enter fullscreen mode Exit fullscreen mode

Output:

name: myapp
services:
  redis_app:
    container_name: redis
    image: redis
    networks:
      default: null
  web:
    build:
      context: /opt/docker/app
      dockerfile: Dockerfile
    container_name: python
    depends_on:
      redis_app:
        condition: service_started
        required: true
    networks:
      default: null
    ports:
      - mode: ingress
        target: 5000
        published: "5000"
        protocol: tcp
    volumes:
      - type: bind
        source: /opt/docker/app
        target: /code
        bind: {}
networks:
  default:
    name: myapp_default
Enter fullscreen mode Exit fullscreen mode

The configuration validates successfully. The web service builds from /opt/docker/app, depends on redis_app, and maps port 5000.


Deploy the Compose Stack

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Output:

[+] up 6/8
 ⠸ Image redis [⣿⣿⣿⣿⣿⣿⣿]  55.6MB / 55.6MB  Pulling                                              3.4s
[+] Building 11.7s (11/11) FINISHED                                                                 
 => [internal] load build definition from Dockerfile                                           0.1s
 => [internal] load metadata for docker.io/library/python:3.13.0b1-slim-bullseye               1.4s
 => [1/4] FROM docker.io/library/python:3.13.0b1-slim-bullseye@sha256:6efce108697ffabf20924c1  4.4s
 => [2/4] ADD . /code                                                                          0.1s
 => [3/4] WORKDIR /code                                                                        0.1s
 => [4/4] RUN pip install -r requirements.txt                                                  4.0s
 => exporting to image                                                                         1.2s 
[+] up 12/12g to docker.io/library/myapp-web                                                   0.0s 
 ✔ Image redis           Pulled                                                                3.5s 
 ✔ Image myapp-web       Built                                                                 11.8s
 ✔ Network myapp_default Created                                                               0.1s
 ✔ Container redis       Created                                                               0.1s
 ✔ Container python      Created                                                               0.1s
Enter fullscreen mode Exit fullscreen mode

The web image built from app/Dockerfile, the redis image was pulled, and both containers were created.


Verify the Containers Are Running

docker compose ps
Enter fullscreen mode Exit fullscreen mode

Output:

NAME      IMAGE       COMMAND                  SERVICE     CREATED          STATUS          PORTS
python    myapp-web   "/bin/sh -c 'python …"   web         13 seconds ago   Up 12 seconds   0.0.0.0:5000->5000/tcp, [::]:5000->5000/tcp
redis     redis       "docker-entrypoint.s…"   redis_app   14 seconds ago   Up 12 seconds   6379/tcp
Enter fullscreen mode Exit fullscreen mode

Both containers are running with the preserved names python and redis.


Check Container Logs

docker compose logs
Enter fullscreen mode Exit fullscreen mode

Output (abridged):

python  |  * Serving Flask app 'app'
python  |  * Debug mode: on
python  |  * Running on all addresses (0.0.0.0)
python  |  * Running on http://127.0.0.1:5000
python  |  * Running on http://172.17.0.3:5000
python  | Press CTRL+C to quit
python  |  * Restarting with stat
python  |  * Debugger is active!
redis   | Starting Redis Server
redis   | 1:C 28 Oct 2026 09:19:34.548 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis   | 1:M 28 Oct 2026 09:19:34.549 * Running mode=standalone, port=6379.
redis   | 1:M 28 Oct 2026 09:19:34.555 * Ready to accept connections tcp
Enter fullscreen mode Exit fullscreen mode

The Flask application is serving on port 5000, and Redis is ready to accept connections on port 6379.


Test the Application

curl -I http://localhost:5000/
Enter fullscreen mode Exit fullscreen mode

Output:

HTTP/1.1 200 OK
Server: Werkzeug/3.1.9 Python/3.13.0b1
Date: Wed, 28 Oct 2026 09:20:17 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 53
Connection: close
Enter fullscreen mode Exit fullscreen mode

The HTTP 200 OK response confirms the application is accessible through the mapped port.


Complete Command Sequence

ssh steve@stapp02
sudo -i

cd /opt/docker
ls -la
ls -la /opt/docker/app
cat /opt/docker/docker-compose.yml

vi /opt/docker/docker-compose.yml
# Apply fixes: build, ports, depends_on

docker compose config
docker compose up -d
docker compose ps
docker compose logs
curl -I http://localhost:5000/
Enter fullscreen mode Exit fullscreen mode

Top comments (0)