我有docker compose文件。容器cucurbit后端依赖于db。它是一个java springboot后端,以postgres作为rdms。当我运行docker-compose up
时,它说cucurbit数据库不存在。
cucurbit-backend | . ____ _ __ _ _
cucurbit-backend | /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
cucurbit-backend | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
cucurbit-backend | \\/ ___)| |_)| | | | | || (_| | ) ) ) )
cucurbit-backend | ' |____| .__|_| |_|_| |_\__, | / / / /
cucurbit-backend | =========|_|==============|___/=/_/_/_/
cucurbit-backend | :: Spring Boot :: (v2.5.7)
cucurbit-backend |
cucurbit-backend | 2023-03-17 16:44:06.632 INFO 1 --- [ main] c.z.cucurbit.CucurbitApplication : Starting CucurbitApplication using Java 11.0.18 on d841a735fe8f with PID 1 (/app.jar started by root in /)
cucurbit-backend | 2023-03-17 16:44:06.634 INFO 1 --- [ main] c.z.cucurbit.CucurbitApplication : No active profile set, falling back to default profiles: default
cucurbit-backend | 2023-03-17 16:44:07.289 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
cucurbit-backend | 2023-03-17 16:44:07.338 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 42 ms. Found 4 JPA repository interfaces.
cucurbit-backend | 2023-03-17 16:44:07.778 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
cucurbit-backend | 2023-03-17 16:44:07.787 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
cucurbit-backend | 2023-03-17 16:44:07.788 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.55]
cucurbit-backend | 2023-03-17 16:44:07.828 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
cucurbit-backend | 2023-03-17 16:44:07.829 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1145 ms
cucurbit-backend | 2023-03-17 16:44:07.930 INFO 1 --- [ main] com.zeitgeist.cucurbit.CORSFilter : Initializing CORSFilter...
cucurbit-backend | 2023-03-17 16:44:08.030 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
cucurbit-db | 2023-03-17 16:44:08.059 UTC [28] FATAL: database "cucurbit" does not exist
cucurbit-backend | 2023-03-17 16:44:09.079 ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
cucurbit-backend |
cucurbit-backend | org.postgresql.util.PSQLException: FATAL: database "cucurbit" does not exist
cucurbit-backend | at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2565) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2677) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:147) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:273) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.Driver.makeConnection(Driver.java:465) ~[postgresql-42.2.24.jar!/:42.2.24]
cucurbit-backend | at org.postgresql.Driver.connect(Driver.java:264) ~[postgresql-42.2.24.jar!/:42.2.24]
我已经将这些添加到环境变量中,但它并没有创建数据库:
environment:
- POSTGRES_DB:cucurbit
- POSTGRES_USER:postgres
- POSTGRES_PASSWORD:password
以下是我的完整docker compose文件:
version: '2'
services:
app:
image: 'docker-spring-boot-postgres:latest'
build:
context: .
container_name: cucurbit-backend
depends_on:
- db
environment:
- CUCURBIT_ENVIRONMENT_PROFILE=development
- CUCURBIT_DATABASE_URL=jdbc:postgresql://cucurbit-db:5432/cucurbit
- CUCURBIT_DATASOURCE_USERNAME=postgres
- CUCURBIT_DATASOURCE_PASSWORD=password
- CUCURBIT_EMAIL_SENDER_USERNAME=noreply.cucurbit@gmail.com
- CUCURBIT_EMAIL_SENDER_PASSWORD=wakeuptellme1234.
- CUCURBIT_EMAIL_NOTIFICATION_SEND_TO=jobskreya@gmail.com
expose:
- 8080
ports:
- 8080
db:
image: 'postgres:13.1-alpine'
container_name: cucurbit-db
hostname: cucurbit-db
expose:
- '5432'
ports:
- 5432:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- POSTGRES_DB=cucurbit
command: postgres -c 'create database cucurbit' dbname=cucurbit
我的docker-compose文件有什么问题?
1条答案
按热度按时间olmpazwi1#
你应该删除docker compose文件的最后一行:
由于传递了环境变量
POSTGRES_DB
,因此将创建名为cucurbit
的数据库。POSTGRES_DB
这个可选的环境变量可以用来为镜像第一次启动时创建的默认数据库定义一个不同的名称。如果没有指定,那么将使用
POSTGRES_USER
的值。来自docker hub description。此外,命令
postgres -c 'create database cucurbit' dbname=cucurbit
本身是错误的,因为您试图连接到名为cucurbit(dbname=cucurbit
)的数据库并创建同名数据库。