我有Docker撰写文件下面。我正在尝试运行以下命令:
- 设置Postgres
- 运行实体框架设置我的模式/表
- 设置PG Admin
- 在数据库上运行一些SQL脚本
我可以得到前三个项目完成没有问题,但我不确定在哪里把我的SQL脚本的运行。现在它位于YAML的最后一行,但我确信这是错误的。我该把它放在哪里呢?我不确定如何引用我之前设置的数据库来运行SQL。
version: '3.8'
services:
#SET UP POSTGRES
db:
image: postgres
restart: always
environment:
POSTGRES_USER: marmalade
POSTGRES_PASSWORD: marmalade
POSTGRES_DB: marmalade
ports:
- "15432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U marmalade"]
interval: 5s
timeout: 5s
retries: 5
#RUN ENTITY FRAMEWORK TO INITIALIZE DATABASE
db-migrator:
image: ${DOCKER_REGISTRY-}db-migrator
build:
context: ../../../
dockerfile: src/marmalade/Dockerfile
environment:
- DOTNET_ENVIRONMENT=IntegrationTest
depends_on:
db:
condition: service_healthy
#SET UP PGADMIN
pgadmin:
container_name: pgadmin4_container
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: marmalade
ports:
- "5050:80"
volumes:
- ./servers.json:/pgadmin4/servers.json # preconfigured servers/connections
- ./sql/admin_schema.sql:/docker-entrypoint-initdb.d/admin_schema.sql #<- WHERE DO I PUT THIS?
这是正确的,但它需要在您的Db服务
的例子:
services:
my_db:
image: postgres:latest
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
更新:
在任何其他服务中运行的问题是,它没有连接到数据库的凭据。所以你可以创建一个shell脚本,然后像这样运行它:
services:
some_service:
image: your_image
volume: ./init.sh:/init.sh
entrypoint: sh -c "/init.sh"
当然前提是你已经在你的映像中安装了shell