如何在Azure中使用docker compose YAML挂载docker卷

3

我正在尝试在Azure中部署一个PosgreSQL Docker容器。为此,我在Azure中创建了一个存储帐户和一个文件共享来存储Docker卷。

此外,我创建了Docker Azure上下文并将其设置为默认值。

要创建卷,我运行:

volume create volpostgres --storage-account mystorageaccount

我可以使用 docker volume ls 命令来验证卷是否已创建。

ID                            DESCRIPTION
mystorageaccount/volpostgres   Fileshare volpostgres in mystorageaccount storage account

当我尝试使用docker compose up进行部署时,出现了错误。

could not find volume source "volpostgres"

这是无法工作的YAML文件。 如何修复它? 如何正确指向卷?

version: '3.7'
services:
  postgres:
    image: postgres:13.1
    container_name: cont_postgres
    networks:
      db:
        ipv4_address: 22.225.124.121
    ports:
      - "5432:5432"
    environment:  
      POSTGRES_PASSWORD: xxxxx
    volumes:
      - volpostgres:/var/lib/postgresql/data
networks:
   db:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 22.225.124.121/24
volumes:
  volpostgres:
     name: mystorageaccount/volpostgres
1个回答

6
您可以按照这里的步骤进行操作。在docker-compose文件中,volumes部分需要更改为以下内容:
volumes:
  volpostgres:
    driver: azure_file
    driver_opts:
     share_name: myfileshare
     storage_account_name: mystorageaccount

docker compose up worked, however I'm getting this error in the Azure log. How to define the owner? 2020-11-24 03:17:42.236 UTC [84] FATAL: data directory "/var/lib/postgresql/data" has wrong ownership 2020-11-24 03:17:42.236 UTC [84] HINT: The server must be started by the user that owns the data directory. - ps0604
@ps0604 这是挂载 Azure 文件共享的已知问题。该挂载是由 root 执行的,您无法更改所有权。因此,您需要将文件共享挂载到另一个点并手动移动数据。 - Charles Xu
Charles,我最终使用了作为Azure服务的PostgreSQL。虽然它能够正常工作,但是费用太高了,所以我需要在容器中安装数据库。基本上,我回到了最初的想法。当你说“这意味着你需要创建一个脚本来移动数据。挂载点应该是一个在镜像中不存在的新文件夹。”时,这个脚本是什么,如何运行? - ps0604
如果我理解正确的话,您是说将卷映射到不是postgres数据目录的目录中。然后在容器启动时,将数据从卷目录移动到postgres数据目录。然后当容器停止时,再次从postgres数据目录移回卷目录。如果这是正确的,那么这很危险,如果发生崩溃怎么办?你会失去所有自启动以来更改的数据。 - ps0604
@ps0604 我的意思是你可以使用脚本来启动所有需要的东西。崩溃意味着你在脚本中做错了什么。 - Charles Xu
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接