我已经用 grafana 在https://docs.microsoft.com/en-us/azure/container-instances/container-instances-volume-azure-files上尝试了这个工作流程
az container create --resource-group
容器不断重启——可能是由于 grafana 无法更新持久共享上的文件。 如何确保在共享上正确设置访问权限? 我可以使用文件共享上设置的策略进行连接吗?
⚠不要编辑此部分。
感谢您的反馈! 我们目前正在调查,并会尽快更新您。
@gs9824你能提供更多关于 grafana 的信息吗? 我不熟悉这项服务。
@MicahMcKittrick-MSFT,Grafana 是一种通过仪表板可视化来自不同来源的数据的工具。 将 Grafana 作为 docker 容器运行的问题是重新启动 docker 容器时不保留设置。
解决方案是将配置存储在持久存储中,以便重新启动不会导致配置丢失。
我尝试为此使用 Azure 文件共享并将其安装在容器 (/var/lib/grafana) 中。 这样配置就被持久化了。
似乎 Grafana 可以在该存储中创建文件(我可以通过存储资源管理器看到),但似乎无法更新任何文件
t=2018-10-09T14:20:36+0000 lvl=eror msg=“服务器关闭” logger=server reason=“服务初始化失败:迁移失败 err:数据库被锁定”
数据库存储在文件共享中。
在文件共享上,可以为用户创建访问权限,但我看不到如何在容器创建命令中指定这些权限。
@gs9824您是否考虑过将永久性磁盘与 AKS 一起使用?
https://docs.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv
@gs9824 对此有何更新?
@MicahMcKittrick-MSFT,抱歉还没有。 我首先尝试通过在容器创建期间执行一些 chmod 命令来使文件共享正常工作。 到目前为止没有运气。
@MicahMcKittrick-MSFT 据我了解,这将涉及建立一个完整的 AKS 集群。 我只是想将 Grafana 作为一个简单的 Azure 容器实例运行,而不需要修改容器中的任何内容。
@seanmck。 @iainfoulds你们中的任何一个对此有什么想法吗?
@gs9824仅供参考,我正在离线工作以获得答案。 一旦我有更多信息,我会更新你。
@gs9824因为这是一个长时间运行的实例并且看到很多重启,你可能只需要在az container create
命令中添加一个长时间运行的命令行,比如 --command-line "tail - f /dev/null”。
此外,请查看本指南以获取其他故障排除选项
https://docs.microsoft.com/en-us/azure/container-instances/container-instances-troubleshooting#container -continually-exits-and-restarts-no-long-running-process
@gs9824 对此有何更新?
你好呀
巧合的是,对于完全相同的用例(Grafana),我遇到了完全相同的问题。
Grafana 记录以下错误:
lvl=eror msg="Server shutdown" logger=server reason="Service init failed: Migration failed err: database is locked"
结果,容器终止。
--command-line "tail -f /dev/null"
对我来说只是阻止显示日志,但 grafana 仍然没有启动并且容器终止。
在不将 grafana 指向挂载的情况下开始,它将使用一个本地文件夹,它可以工作。 然后,在 Azure 门户上,我尝试手动在挂载上写入文件夹和文件,这可以正常工作。
这是一个 ARM 模板,因此您可以重现该问题。 只需替换我添加的一些占位符,您就可以开始使用了。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"SOME_CONTAINER_GROUP_NAME": {
"defaultValue": "CONTAINER_GROUP_NAME",
"type": "String"
}
},
"variables": {},
"resources": [{
"comments": "Generalized from resource: '/subscriptions/SUBSCRIPTION_ID/resourceGroups/grafana-test/providers/Microsoft.ContainerInstance/containerGroups/CONTAINER_GROUP_NAME'.",
"type": "Microsoft.ContainerInstance/containerGroups",
"name": "[parameters('SOME_CONTAINER_GROUP_NAME')]",
"apiVersion": "2018-04-01",
"location": "westeurope",
"scale": null,
"properties": {
"containers": [{
"name": "[parameters('SOME_CONTAINER_GROUP_NAME')]",
"properties": {
"image": "grafana/grafana",
"command": [],
"ports": [{
"protocol": "TCP",
"port": 3000
},{
"protocol": "TCP",
"port": 80
}
],
"environmentVariables": [{
"name": "GF_INSTALL_PLUGINS",
"value": "grafana-azure-monitor-datasource"
},{
"name": "GF_PATHS_DATA",
"value": "/mnt/grafana"
}
],
"resources": {
"requests": {
"memoryInGB": 1.5,
"cpu": 1
}
},
"volumeMounts": [{
"name": "grafana-storage",
"mountPath": "/mnt/grafana",
"readOnly": false
}
]
}
}
],
"volumes": [{
"name": "grafana-storage",
"azureFile": {
"shareName": "grafana-test",
"readOnly": false,
"storageAccountName": "SOMESTORAGE_ACCOUNT",
"storageAccountKey": "SOMESTORAGE_KEY"
}
}
],
"restartPolicy": "Always",
"ipAddress": {
"ports": [{
"protocol": "TCP",
"port": 3000
},{
"protocol": "TCP",
"port": 80
}
],
"type": "Public"
},
"osType": "Linux"
},
"dependsOn": []
}
]
}
@MicahMcKittrick-MSFT 很抱歉没有早点回复——很高兴知道我不是唯一一个有这个问题的人:)。 同时,我在 VM 上运行 Grafana 作为一种解决方法(通过 Market place - Grafana Labs 的 Grafana 安装)。 重启很可能是因为 grafana 无法启动,因为数据库被锁定为@orendin状态。
感谢大家提供额外的细节。
我不确定这是否是我们可以包含在此文档中的信息,但无论如何,我将分配给作者进行审查,看看我们是否可以添加任何细节。
你好,这次我和prometheus有同样的问题。
同样的情况下,我正在使用 prometheus 映像创建一个安装有文件共享的 ACI。
echo" parameters"
ACI_PERS_RESOURCE_GROUP=ftp-group-container
ACI_PERS_LOCATION=some_location
ACI_PERS_SHARE_NAME=some_share
echo" Create the storage account with the parameters "
az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS
echo " create file share"
az storage share create --name $ACI_PERS_SHARE_NAME --account-name
$ACI_PERS_STORAGE_ACCOUNT_NAME
echo" get the storage key "
STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv)
echo "storage key : "$STORAGE_KEY
echo" create a container instance "
az container create -g some-container-group \
--name prometheus-instance \
--image prom/prometheus \
--restart-policy OnFailure \
--ports 9090 \
--dns-name-label some-label \
--ip-address public \
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $STORAGE_KEY \
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path /etc/prometheus/
我在共享文件“prometheus.yml”中添加了一个 YAML 文件
我希望 ACI 启动并读取我在共享文件上创建的 YAML 文件,因为我在其上安装了 /etc/prometheus
ACI 无法停止重新启动,因为它需要从“/etc/prometheus/prometheus.yml”获取配置并且错误是err="error loading config from \"/etc/prometheus/prometheus.yml\": couldn't load configuration (--config.file=\"/etc/prometheus/prometheus.yml\"): open /etc/prometheus/prometheus.yml: permission denied
我设法对文件系统进行 bash 访问以添加我自己的权限,
drwx------ 2 root root 0 Nov 15 21:33 prometheus.yml
chmod a+rwx prometheus.yml
drwx------ 2 root root 0 Nov 15 21:34 prometheus.yml
正如您所看到的,即使在文件上使用 chmod 作为根,我也无法更改权限。 所以可能这就是我无法让 ACI 读取 YAML conf 文件的原因
谢谢你的帮助。
嗨,大家好,
我解决了我的问题。
az storage share policy create --help
我添加了一个包含所需所有权限(读写列表)的共享策略,并且它有效。
我不再有 ACI 的权限问题
希望这会有所帮助
嘿,
在将 neo4j 映像部署为容器实例时,我遇到了同样的问题。
感谢上述所有工作。 都试过了。
问题
_参考文献_
{
"....": [],
"properties": {
"containers": [
{
"....": [],
"environmentVariables": [],
"resources": {
"requests": {
"memoryInGB": 4,
"cpu": 1
}
},
"volumeMounts": [
{
"name": "data",
"mountPath": "/var/lib/neo4j/data/"
}
]
}
]
},
"....": [],
"volumes": [
{
"name": "data",
"azureFile": {
"shareName": "neo4jfiles",
"storageAccountName": "neo4jcontainerstorage",
"storageAccountKey": "<I-REVEALED-MY-SECRET-KEY>"
}
}
],
"....": []
}
原始问题似乎已解决。 如果您有意见,请添加@dkkapur 。 谢谢。
有没有人为 Grafana 解决了这个问题? 不幸的是,我仍然得到错误
„lvl=eror msg="Server shutdown" logger=server reason="Service init failed: Migration failed err: database is locked"
我已经创建了一个具有所有权限的“访问策略”,但我不知道在安装卷时是否必须以某种方式指定它
"resources": [
{
"apiVersion": "2018-10-01",
"type": "Microsoft.ContainerInstance/containerGroups",
"location": "[parameters('location')]",
"name": "[parameters('containerName')]",
"properties": {
"containers": [
{
"name": "[parameters('containerName')]",
"properties": {
"image": "[parameters('imageName')]",
"ports": "[parameters('ports')]",
"environmentVariables": [
{
"name": "GF_PATHS_DATA",
"value": "/mnt/grafana/data"
},
{
"name": "GF_PATHS_LOGS",
"value": "/mnt/grafana/logs"
},
{
"name": "GF_DASHBOARDS_PATH",
"value": "/mnt/grafana/dashboards"
}
],
"volumeMounts": [
{
"name": "grafana-storage",
"mountPath": "/mnt/grafana",
"readOnly": false
}
],
"resources": {
"requests": {
"cpu": "[int(parameters('numberCpuCores'))]",
"memoryInGB": "[float(parameters('memory'))]"
}
}
}
}
],
"volumes": [
{
"name": "grafana-storage",
"azureFile": {
"shareName": "grafana",
"readOnly": false,
"storageAccountName": "_NAME_",
"storageAccountKey": "_ACCESS_KEY_"
}
}
],
"restartPolicy": "[parameters('restartPolicy')]",
"osType": "[parameters('osType')]",
"ipAddress": {
"type": "[parameters('ipAddressType')]",
"ports": "[parameters('ports')]",
"dnsNameLabel": "[parameters('dnsNameLabel')]"
}
},
"tags": {}
}
]
Microsoft,请修复已安装的 Fileshare 存储需要容器以 root 身份运行的事实,因为这违反了 docker 最佳实践。 此外,它消除了许多不以 root 身份运行且需要文件存储的容器。
我认为 Grafana 的根本问题是 docker 映像没有以 root 身份运行。
文件共享似乎挂载为root:root 777。这是默认设置。
当 Grafana 用户尝试访问挂载的存储时,它会失败。 您也不能 CHOWN 已安装的存储,我已将用户升级回 ROOT 并在 init.sh scipt 中尝试将权限分配给 Grafana 用户。 没有运气。
您在 ACI 容器内也没有足够的权限来挂载任何其他文件共享,cifs 挂载失败。
建议的解决方案:浮动指定装载选项的能力,与 Azure AKS 中的相同。
在 Kubernetes / AKS 中,您可以挂载 Azure 文件共享,但您可以指定挂载选项,例如 GID、UID 和默认权限。
@dlepow @dkkapur关于这个话题有什么新闻吗?
分配给 Deep 进行跟进。 谢谢!
@dkkapur 有什么更新吗?
嘿,伙计们!
最后我发现了这个问题……花了 10 个小时试图解决问题
有什么消息吗? 看起来像是一年多以前分配的,但没有答案
标准 Postgresql Docker 映像也会发生同样的情况 - 如果您尝试通过挂载文件共享来使数据库持久化,它不会启动。
@MicahMcKittrick-MSFT 嘿,Micah,这有什么更新吗?
@dkkapur是否有任何计划允许 ACI 容器使用以下 AKS 等选项安装 azure 文件共享?
安装选项:
- 目录模式=0777
- 文件模式=0777
- uid=1000
- gid=1000
- mfsymlinks
- 诺布尔
- 缓存=无
我认为 Grafana 的根本问题是 docker 映像没有以 root 身份运行。
确切地。 它使用一个名为grafana
的有限权限用户(如果没有故意更改)。
这个问题基本上阻止了生产中的任何持久存储绑定,因为我们不能依赖 docker 容器的健康状况,这正是我们首先使用 Docker 容器的原因。 是否有任何我们可以附加到的非提升用户启用存储?
你好,
这事有进一步更新吗 ?
我在一个 postgreSQL 容器上遇到了同样的问题,我想在 /var/lib/postgresql/data 上挂载一个文件共享以跨多个容器版本持久保存一个小型数据库,但该数据库没有权限使用monted文件共享。
以下是 Azure 容器实例上输出的日志:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
2020-08-28 07:12:06.201 UTC [83] FATAL: data directory "/var/lib/postgresql/data" has wrong ownership
2020-08-28 07:12:06.201 UTC [83] HINT: The server must be started by the user that owns the data directory.
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/postgresql/data"
running bootstrap script ...
然后容器停止。
我对将容器部署到天蓝色也很陌生,所以如果这不是预期的方法,我会很高兴学习新的东西。
(PS:我刚刚注意到alessiostalla已经提到这也会影响 postgreSQL 图像)
最有用的评论
Microsoft,请修复已安装的 Fileshare 存储需要容器以 root 身份运行的事实,因为这违反了 docker 最佳实践。 此外,它消除了许多不以 root 身份运行且需要文件存储的容器。
我认为 Grafana 的根本问题是 docker 映像没有以 root 身份运行。
文件共享似乎挂载为root:root 777。这是默认设置。
当 Grafana 用户尝试访问挂载的存储时,它会失败。 您也不能 CHOWN 已安装的存储,我已将用户升级回 ROOT 并在 init.sh scipt 中尝试将权限分配给 Grafana 用户。 没有运气。
您在 ACI 容器内也没有足够的权限来挂载任何其他文件共享,cifs 挂载失败。
建议的解决方案:浮动指定装载选项的能力,与 Azure AKS 中的相同。
在 Kubernetes / AKS 中,您可以挂载 Azure 文件共享,但您可以指定挂载选项,例如 GID、UID 和默认权限。