azure - Azure WebApps + Azure File 与多容器共享
问题描述
我一直在尝试使用我的 API 设置我的 Postgresql 数据库。我的 API 位于 Azure WebApps 上,数据库位于 Azure 文件共享上。
以下是我的 docker compose 文件
version: '3.3'
services:
db:
image: postgres
volumes:
- db_path:/var/lib/postgresql/data
restart: always
environment:
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: dbuser's_password
POSTGRES_DB: db_1
api:
depends_on:
- db
image: <my registry>.azurecr.io/api:latest
ports:
- "80:80"
restart: always
它确实已部署,但我在 Azure 文件共享的位置找不到我的数据库文件。现在,当我重新部署时,我可以在Log Stream
.
有人可以告诉我我在哪里做错了吗?为什么我的数据库不在我的 Azure 文件共享中?
提前致谢
编辑:
我还更新了我的 docker-compose.yml 文件,如下所示。我所做的更改是保持卷名与映射名称相同并添加driver_opts
:
version: '3.8'
services:
db:
image: mysql
volumes:
- mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=dbName
- MYSQL_ROOT_PASSWORD=MyRootPassword!
- MYSQL_USER=dbUser_1
- MYSQL_PASSWORD=dbUser_1'sPassword
restart: always
api:
depends_on:
- db
entrypoint: ["./wait_for.sh", "db:3306", "-t", "3600", "--", "execute", "api"] #waiting very long enough to set the db server up and running
image: <my registry's url>/api:latest
ports:
- "80:80"
restart: always
volumes:
mysql:
driver: azure_file
driver_opts:
share_name: Azure_Share_Name
storage_account_name: Azure_Storage_Account_Name
storageaccountkey: Azure_Key
解决方案
这是一个已知的问题。当您使用带有 Azure 文件共享的持久卷进行装载时,装载路径将具有root
所有者和组,并且您无法更改它。所以如果应用程序需要一个特殊用户的路径,像这个问题,Postgresql需要/var/lib/postgresql/data
有postgres
所有者的挂载路径,那么它就无法实现。
请注意,您提供的路径映射屏幕截图显示了错误的挂载路径以及 YAML 文件中的配置。这可能是一个错误。
推荐阅读
- java - 从 jlink 映像创建所有包含 windows 可执行文件
- mongodb - 用于选择嵌入对象的 Mongodb 查询
- javascript - 超级代理不返回响应
- css - 如何在智能手机上添加水平滚动条?
- javascript - 为什么此按钮单击另一个按钮不起作用
- angularjs - 创建一个数组,然后在 ng-repeat 之后对数据进行排序
- ios - 是否可以使用 AVfoundation 为我自己的应用程序使用 Apple 的支付成功音效?
- android - 如何在另一个 RecyclerView 的项目中实现 RecyclerView
- python - 将 caffe 上的 net forward 从 MATLAB 转换为 Python 的问题
- excel - 如何创建允许使用 UserForm 在列中连续输入数据的数据条目