Azure存储上的Docker合成卷:如何绑定到文件

ie3xauqp  于 2023-03-13  发布在  Docker
关注(0)|答案(2)|浏览(131)

我无法访问Azure容器示例,该示例将Docker中的文件链接到我放置在Azure存储帐户中的文件
卷名后的路径似乎不被接受:/配置文件/nginx.配置文件

volumes:
  - nginxconf/conf/nginx.conf:/etc/nginx/nginx.conf

下面是我docker-composer.yml

version: '3.9'

services:
  client:
    image: nginx
    ports:
      - '8080:80'
    volumes:
      - nginxconf/conf/nginx.conf:/etc/nginx/nginx.conf

volumes:
  nginxconf:
    driver: azure_file
    driver_opts:
      share_name: nginxfiles
      storage_account_name: nginxcontainerstorage
      storage_account_key: "xxxxxxxxxxxxxxx"
bmp9r5qi

bmp9r5qi1#

要解决我的问题,我修改systemctl服务文件,通过在不同的位置指定一个配置文件来启动nginx.我有一个卷,其中有nginx.service和另一个有我的nginx配置.我装入文件夹而不是文件,它工作
验证码:https://github.com/auriou/dockerfiles/tree/master/nginx
我在本地做了测试,然后在 Azure
当地:

version: '3.9'

services:
  client:
    image: nginx
    ports:
      - '8080:80'
    volumes:
      - nginxconfig:/etc/nginx/myconfig
      - nginxservice:/etc/systemd/system/multi-user.target.wants

volumes:
  nginxconfig:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: "/mnt/c/Users/p.auriou/Documents/GIT/azure/aci/nginx/docker/config"
  nginxservice:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: "/mnt/c/Users/p.auriou/Documents/GIT/azure/aci/nginx/docker/service"

azure:我将文件复制到了我的azure存储中

version: '3.9'

services:
  client:
    image: nginx
    domainname: nginxconf
    ports:
      - '80:80'
    volumes:
      - nginxconfig:/etc/nginx/myconfig
      - nginxservice:/etc/systemd/system/multi-user.target.wants

volumes:
  nginxconfig:
    driver: azure_file
    driver_opts:
      share_name: nginxconfig
      storage_account_name: nginxcontainerstorage
      storage_account_key: "XXXXXXXXXXX"
  nginxservice:
    driver: azure_file
    driver_opts:
      share_name: nginxservice
      storage_account_name: nginxcontainerstorage
      storage_account_key: "XXXXXXXXXXX"

nginx的systemd文件

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/myconfig/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target
c2e8gylq

c2e8gylq2#

我曾尝试在我的环境中重现同样的效果,并获得了积极的结果。
注意:在本演示中,我尝试将index.html文件绑定到**/usr/share/nginx/html文件夹,以便轻松识别更改。
步骤1:添加Docker上下文以在
ACI**中运行docker-composite.yaml

有关设置Docker上下文的详细信息,请参阅此link
为了重现你的问题,我已经执行了docker-compose.yaml文件,下面的配置和你的一样。

我得到了下面的错误后,运行上述代码.

现在,我已经将上面的代码修改如下。

version: '3.9'

services:
  client:
    image: nginx
    ports:
      - '80:80'
    volumes:
      - nginxconf:/usr/share/nginx/html

volumes:
  nginxconf:
    driver: azure_file
    driver_opts:
      share_name: fileshare4dc
      storage_account_name: strg4dc
      storage_account_key: "xxxxxxxxxxxxxxxxxxxxxxxxx"

注意:ACI目前不支持端口Map。容器端口和ACI端口必须相同。

现在运行docker compose并验证创建的容器示例。

$docker compose --project-name nginx-aci up -d

比较Azure文件共享和ACI中的文件,以检查绑定卷是否正常工作。
下面是我的Azure文件共享中的文件。

下面是我的Container中的文件。

上面屏幕截图中使用的命令。

$docker ps
$docker exec -it <container-name> bash

无论在Azure文件共享中添加了什么更改或文件,它都将在容器中反映相同的内容。

相关问题