ECS将卷装入nginx容器

时间:2017-11-06 03:43:26

标签: php docker nginx docker-compose amazon-ecs

我正在尝试设置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进行此操作。 我不知道如何创建网络数据卷,让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访问这些数据?

1 个答案:

答案 0 :(得分:3)

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

这意味着我需要在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参数访问数据。