我有以下docker-compose.yml
:
version: '3.4'
services:
# bla bla bla
pg:
image: postgres:9.6
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD:
POSTGRES_DB: just_db
volumes:
pgdata:
然后是Dockerfile:
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY . .
RUN dotnet publish ./src/WebApp/WebApp.csproj -c Release -o /app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final
WORKDIR /app
EXPOSE 80
COPY --from=build /app .
ENTRYPOINT ["dotnet"]
CMD ["WebApp.dll"]
如我所读,如果我在POSTGRES_USER
db中设置POSTGRES_PASSWORD
,POSTGRES_DB
和docker-compose.yml
变量,将被创建。来自文件夹docker-entrypoint-initdb.d
的sql脚本将被执行。我希望在运行just_db
之后创建数据库docker-compose up --build
,但是不会发生。如何使用docker-comose
创建数据库?
答案 0 :(得分:0)
docker-compose
仅在$PGDATA
不存在的情况下创建数据库。这是因为仅在initdb
为空时(或更确切地说,在不存在$PGDATA
文件的情况下才调用PG_VERSION
)。请参阅entrypoint source for more info。由于您在pgdata:/var/lib/postgresql/data
中提供了docker-compose.yml
,因此Docker将只使用现有的内容,而不会创建名为just_db
的其他数据库。如果要创建just_db
,则需要提供一个$PGDATA
空的卷(或删除PG_VERSION
,但可能会使情况更混乱),或者省略总数。