我正在使用 docker-compose.yml 生成 docker 容器和初始架构。一切加载正常,但初始表无处可寻

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

我正在尝试使用 sh 脚本创建一个具有预加载初始架构的 docker 容器。这意味着我有一个 python main.py 文件,它使用以下代码运行 bash 脚本:

rm -rf postgres_data
docker-compose down --rmi all --volumes
docker-compose up --force-recreate

还有一个包含以下代码的 docker-compose.yml:

version: '3'

services:
  postgres:
    image: postgres:13.1
    container_name: mydatabasename_database
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
      timeout: 45s
      interval: 10s
      retries: 10
    restart: always
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=MYDATABASENAME_DB
      - APP_DB_USER=appuser
      - APP_DB_PASS=appass
      - APP_DB_NAME=appname
    volumes:
      - ./init-schema.sql:/docker-entrypoint-initdb.d/init-db-01.sql
      - postgres_data:/var/lib/postgresql/data
    ports:
      - 5432:5432

volumes:
  postgres_data:

我还有一个名为 init-schema.sql 的 sql 脚本,其代码如下:

CREATE USER appuser WITH PASSWORD 'appass';
CREATE DATABASE mydatabasename_db;
GRANT ALL PRIVILEGES ON DATABASE mydatabasename_db TO appuser;

\c mydatabasename_db;

CREATE TABLE IF NOT EXISTS my_table (
    client_id character varying(36) NOT NULL,
    value character varying(255)
);

再次,在 docker 日志中,一切似乎都在按预期运行;但是,当我尝试通过 dbeaver 或 pycharm 连接到容器时,该表不存在。顺便说一句,所有这些文件都位于同一目录中。

我真的已经尝试了我一生中的一切。最初,我尝试简单地使用

docker build
命令和Dockerfile通过
COPY ./initial-schema.sql /docker-entrypoint-initdb.d/config.sql
将initial-schema.sql复制到容器目录中,但这也由于某种原因不起作用。因此,我转而使用 docker-compose 插件,然后编写了上面提供的代码。我不知道还能做什么。我还手动运行了 sql 脚本,它运行得很好。 dbeaver 和 pycharm 中都会弹出该表格。我希望所有内容都可以一步加载,而这个错误就是我完成此任务所剩下的。我想提前向大家表示感谢!希望你们能发现我遗漏的东西,因为我完全没有想法。

database docker docker-compose dockerfile docker-container
1个回答
0
投票

我自己修好了!似乎将该部分命名为

postgres
导致了问题。将我的文件更改为:

version: '3'
services:
  mydatabasename:
    image: postgres:13.1
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
      timeout: 45s
      interval: 10s
      retries: 10
    restart: always
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=password
    volumes:
      - ./init-schema.sql:/docker-entrypoint-initdb.d/init-db-01.sql
      - ./postgres-data:/var/lib/postgresql/data
    ports:
      - 5432:5432
volumes:
  postgres-data:
© www.soinside.com 2019 - 2024. All rights reserved.