Создать базу данных с помощью docker-compose - PullRequest
0 голосов
/ 13 октября 2019

У меня есть следующее 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, POSTGRES_PASSWORD и POSTGRES_DBпеременные в docker-compose.yml дБ будут созданы. И sql скрипты из папки docker-entrypoint-initdb.d будут выполнены. Я ожидаю, что база данных just_db будет создана после запуска docker-compose up --build, но этого не произойдет. Как мне создать базу данных с docker-comose?

1 Ответ

0 голосов
/ 15 октября 2019

docker-compose создаст базу данных, только если $PGDATA еще не существует. Это связано с тем, что initdb вызывается только тогда, когда $PGDATA пусто (или, точнее, когда файла PG_VERSION не существует). Пожалуйста, обратитесь к источнику для получения дополнительной информации . Поскольку вы предоставляете pgdata:/var/lib/postgresql/data в своем docker-compose.yml, Docker просто использует то, что уже есть, и не создает дополнительную базу данных с именем just_db. Если вы хотите, чтобы он создавал just_db, то вам нужно либо предоставить пустой том $PGDATA (или удалить PG_VERSION, но это может усложнить работу), либо вообще пропустить том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...