I have the below docker-compose.yaml file that sets up a database and runs a python script
version: '3.3'
services:
  db:
    image: mysql:8.0
    cap_add:
      - SYS_NICE
    restart: always
    environment:
      - MYSQL_DATABASE=test_db
      - MYSQL_ROOT_PASSWORD=xxx
    ports:
      - '3310:3310'
    volumes:
      - db:/var/lib/mysql
  py_service:
    container_name: test_py
    build: .
    command: ./main.py -r compute_init
    depends_on:
      - db
    ports:
      - 80:80
    environment:
      DB_HOST: db
      DB_PORT: 3306
      DB_USER: root
      DB_PASSWORD: xxx
      DB_NAME: test_db
    links:
      - db
    volumes:
      - py_output:/app/output
volumes:
  db:
    driver: local
  py_output:
To run it I perform the following
docker-compose build docker-compose up docker-compose run -v /home/ubuntu/docker_directory/output:/app/output/* py_service
Here is the Dockerfile
FROM python:3.7 RUN mkdir /app WORKDIR /app COPY env/requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python3","main.py","-r","compute_init"]
Now this works fine I can see the data has been properly populated under the generated in the msql database.
The python file at the end of the script should dump a csv file to /app/ouput/output.csv (via pandas library df.to_csv("output/output.csv"))
My question is, how to recover that csv from the container to the local directory.
The script seems to finish off without any errors, but can’t find the output file at the end.
Advertisement
Answer
it seems using docker-compose run -v $(pwd)/output:/app/output py_service
did the job