在Docker compose中获取CSV文件数据?

问题描述 投票:0回答:1

我有一个 CLI 应用程序,可以从 PostgreSQL 数据库获取 CSV 文件。虽然运行的代码创建了 CSV 文件并将数据放入其中,但是通过 docker compose 运行应用程序并没有这样做。

我将卷放入

app
服务中,但不起作用。

Docker 撰写文件

version: "3.8"
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    command: sh -c "while true; do echo 'App is running'; sleep 10; done"
    environment:
      POSTGRES_HOST: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: flow
      POSTGRES_SSL: disable
    depends_on:
      - postgres
    volumes:
      - /path/to/store/CSV/file:/app/data

  postgres:
    image: postgres:latest
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: flow
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
    driver: local

Dockerfile

FROM golang:1.22.0-alpine3.19

RUN mkdir -p /app

WORKDIR /app

COPY go.mod /app
COPY go.sum /app

COPY . /app

RUN go mod download

RUN go build -o flow .

CMD ["./flow"]

数据获取功能

func GetBudgetData(filepath, filename string) error {
    bv := new(BudgetVariables)
    db, err := budget_db.Connection()
    if err != nil {
        return err
    }

    query := "SELECT categories, amounts FROM Budget"
    rows, err := db.Query(query)
    if err != nil {
        return err
    }
    defer rows.Close()

    file, err := os.Create(filepath + "/" + filename)
    if err != nil {
        return err
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    header := []string{"Category", "Amount"}
    if err := writer.Write(header); err != nil {
        return err
    }
    for rows.Next() {
        if err := rows.Scan(&bv.Category, &bv.Amount); err != nil {
            return err
        }

        data := []string{bv.Category, bv.Amount}
        if err := writer.Write(data); err != nil {
            return err
        }

        if err := rows.Err(); err != nil {
            return err
        }
    }
    fmt.Printf("Successfully created a '%s' file in '%s'\n", filename, filepath)
    return nil
}
postgresql docker csv go docker-compose
1个回答
0
投票

您正在覆盖 Dockerfile 的

CMD
(“
./flow
”),它通过在撰写文件中使用
command
来运行脚本。

来自文档

command
覆盖容器声明的默认命令 图像,例如 Dockerfile 的
CMD

© www.soinside.com 2019 - 2024. All rights reserved.