如何在 Azure 中映射数据库卷

How to map db volume in azure

我正在尝试使用 azure 容器注册表作为图像源在 azure 中托管一个多容器应用程序(web api+ postgres db)。

这是我正在使用的 docker 撰写文件:

version: '3.4'

services:
  dockerapi:
    image: test.azurecr.io/pgdemo:1
    ports:
      - "1985:80"   

  postgresimage:
    image: postgres
    ports:
      - "5432"
    environment:
      POSTGRES_USER: "bloguser"
      POSTGRES_PASSWORD: "bloguser"
      POSTGRES_DB: "blogdb"
    volumes:
      - $./dbscripts/seed.sql :/docker-entrypoint-initdb.d/seed.sql
      - db-data:/var/lib/postgresql/data
volumes: 
   db-data:
      driver: local

我跟着this article开发了这个应用程序,在本地环境中一切顺利。 volumes 部分似乎在 docker-compose 文件中不正确。我尝试用 WEBAPP_STORAGE_HOME 替换 .,但从 azure conatainer 日志看来,种子脚本仍然被忽略:

Microsoft.EntityFrameworkCore.Database.Command[20102] 2019-06-18T07:00:20.279183157Z Failed executing DbCommand (41ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] 2019-06-18T07:00:20.279189958Z SELECT b.id, b.title, b.description 2019-06-18T07:00:20.279193958Z FROM blog AS b 2019-06-18T07:00:20.298436041Z WHERE STRPOS(b.title, 'Title') > 0 2019-06-18T07:00:20.298452842Z Npgsql.PostgresException (0x80004005): 42P01: relation "blog" does not exist 2019-06-18T07:00:20.298457842Z at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<g__ReadMessageLong|0>d.MoveNext() 2019-06-18T07:00:20.298462242Z --- End of stack trace from previous location where exception was thrown --- 2019-06-18T07:00:20.298466242Z at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<g__ReadMessageLong|0>d.MoveNext() 2019-06-18T07:00:20.298478543Z --- End of stack trace from previous location where exception was thrown --- 2019-06-18T07:00:20.298482943Z at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) 2019-06-18T07:00:20.298486743Z at Npgsql.NpgsqlDataReader.NextResult() 2019-06-18T07:00:20.298490643Z
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) 2019-06-18T07:00:20.298494543Z at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 2019-06-18T07:00:20.298498343Z at System.Data.Common.DbCommand.ExecuteReader() 2019-06-18T07:00:20.298502143Z at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)

在azure中增加数据量的方式正确吗?

要在Azure中为Web App for Container添加数据卷,您需要像这样在卷中挂载路径:

version: '3.4'

services:
  dockerapi:
    image: test.azurecr.io/pgdemo:1
    ports:
      - "1985:80"   

  postgresimage:
    image: postgres
    ports:
      - "5432"
    environment:
      POSTGRES_USER: "bloguser"
      POSTGRES_PASSWORD: "bloguser"
      POSTGRES_DB: "blogdb"
    volumes:
      - ${WEBAPP_STORAGE_HOME}/dbscripts:/docker-entrypoint-initdb.d
      - db-data:/var/lib/postgresql/data
volumes: 
   db-data:
      driver: local

然后设置环境变量WEBSITES_ENABLE_APP_SERVICE_STORAGETrue。请记住,它只是添加持久卷。所以需要将文件seed.sql复制到通过FTP/FTPS的路径中。有关详细信息,请参阅 Add persistent storage