ECS 挂载卷到 nginx 容器

Posted

技术标签:

【中文标题】ECS 挂载卷到 nginx 容器【英文标题】:ECS mount volume to nginx container 【发布时间】:2018-04-18 04:08:21 【问题描述】:

我正在尝试设置 ECS 以运行我的 php/nginx docker 应用程序。

它使用这个 docker-compose.yml 文件在本地工作:

version: '2'
  services:

   nginx:
    image: NGINX-IMAGE
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - php
    environment:
        APP_SERVER_NAME: <ip>

   php:
    image: PHP-IMAGE
    ports:
        - 9000:9000
    volumes:
        - /var/www/html

问题是我无法使用 ECS 进行这项工作。 我不知道如何创建 web-data 卷并让 nginx 使用 volumes_from 抓取它。

我正在尝试使用此 JSON 创建卷:

 volumes='[
   
       "name": "webdata",
       "host": 
          "sourcePath": "/var/www/html"
       
   
 ]'

然后在我的 php-container 的容器定义中添加:

"mountPoints": 
 [
     
       "sourceVolume": "webdata",
       "containerPath": "/var/www/html",
       "readOnly": false
     
 ]

但是,当我这样做时,它会将主机的 /var/www/html 文件夹中的内容添加到容器的 /var/www/html 文件夹中。 我的问题是,如何配置卷以使用 php 的 /var/www/html 容器中的数据并让 nginx 访问这些数据?

【问题讨论】:

您需要为两个容器定义相同的挂载点。 volume_from 已弃用,不应使用 【参考方案1】:

我设法找到了适合 ECS 设置的解决方案。 我只是在我的 php Dockerfile 中创建了一个 VOLUME,引用 /var/www/html

这意味着我不再需要引用 php 容器的 volumes 部分中的卷。并且 nginx 仍然可以使用volumes_from 访问该卷。

更新

这是我对 ECS 的工作任务定义:

task_template='[

  "name": "nginx",
  "image": "NGINX_IMAGE",
  "essential": true,
  "cpu": 10,
  "memoryReservation": 1000,
  "portMappings": [
    
      "containerPort": 80,
      "hostPort": 80
    
  ],
  "environment" : [
       "name" : "APP_SERVER_NAME", "value" : "%s" 
  ],
  "links": [
      "app"
  ],
  "volumesFrom": [
       "sourceContainer": "app" 
  ]
,

  "name": "app",
  "image": "IMAGE",
  "essential": true,
  "cpu": 10,
  "memoryReservation": 1000,
  "portMappings": [
    
      "containerPort": 9000,
      "hostPort": 9000
    
  ]

]'

然后我将VOLUME ["/var/www/html"] 添加到我的应用程序Dockerfile。现在 nginx 可以使用任务定义中的volumes_from 参数访问数据了。

【讨论】:

你能发布工作示例和步骤吗?想不通... @user3315525 给你,让我知道它是否适合你。 你能看看我的问题吗请My question我在将卷安装到正确的位置时遇到问题,而且我需要帮助将图像与相同的图像概念相一致...任何帮助赞赏 谢谢。这些配置不适用于 ECS Fargate。当 networkMode=awsvpc 时不支持链接,这是 Fargate 现在唯一的网络模式。

以上是关于ECS 挂载卷到 nginx 容器的主要内容,如果未能解决你的问题,请参考以下文章

ECS CLI - 启动容器实例时挂载 EFS

Docker 基本操作 数据卷 -- docker 数据卷基本操作挂载数据卷

用于挂载EFS存储的ECS容器实例的引导用户数据

在 AWS ECS 容器上挂载 S3 存储桶作为文件系统

ECS Fargate 上的 EFS 挂载 - 非 root 用户的读/写权限被拒绝

ECS 中的 EFS 挂载“无法解决”