在ECS上使用修改后的nginx.conf启动NginX

时间:2019-03-01 15:39:53

标签: amazon-web-services docker nginx amazon-ecs

我在AWS中拥有一个带有ECS集群,EFS源和在该集群上运行的某些服务的环境。

我的服务之一是NginX Web服务器,我使用它来服务我们的网站和我们的服务。作为保留一些敏感和静态配置文件的解决方案,我们选择了EFS服务。因此,每个服务都从此EFS创建一个卷,并在每次容器启动时将其装入。

问题出在NginX。我想将我的nginx.conf文件存储到一个EFS文件夹中,并且在NginX服务启动后,我们希望容器将该文件复制到/etc/nginx/文件夹中,以便我的NginX服务器从配置中启动。

  1. 我已经尝试成功构建自己的映像,包括我的配置,但这不是我们想要的。这意味着我们每次要在nginx.conf上更改一行时都应该构建一个新映像。
  2. 我试图创建一个脚本,以在每次容器启动时运行并复制我的配置,但是我没有设法使其在ECS上播放。 NginX无法重新加载,或者语法错误,或者文件不可用。
#!/bin/bash
cp /efs/nginx.conf /etc/nginx/
nginx -s reload
  1. 我考虑找出如何创建一个Cron作业以每隔X分钟运行一次并将我的nginx.conf复制到etc / nginx的方法,但这似乎是一种愚蠢的方法。
  2. 我进行了60个不同的任务定义修订,以了解此CMD Environment选项在ECS上如何工作。当然,它们中的大多数与语法有关,我会遇到诸如“无效选项:bash”或“无效选项:/tmp/1.sh”之类的巴赫错误,等等

样品:

1。命令["cp","/efs/nginx.conf /etc/nginx/"]

2。进入点["nginx","-g","daemon off;"]   命令["cp /efs/nginx.conf /etc/nginx/"]

  1. 入口点:["nginx","-g","daemon off"] 命令:["/bin/sh","cp","/efs/nginx.conf/","/etc/nginx/"]

  2. 命令["[\"cp\"","\"/efs/nginx.conf\"","\"/etc/nginx/\"]","[\"nginx\"","\"-g\"","\"daemon off;\"]"]

  3. 命令["cp /efs/nginx.conf /etc/nginx/","nginx -g daemon off;"]

  4. 命令["cp","/efs/nginx.conf /etc/nginx/","nginx -g daemon off;"]

-

是否有人知道或已经有人在ECS上实施此解决方案? 要用绑定卷中的修改后的文件替换/etc/nginx/nginx.conf?

预先感谢

1 个答案:

答案 0 :(得分:0)

解决方案:

正如我在上面的问题中提到的,我想在Nginx服务容器中使用一个静态的nginx.conf文件,该文件位于EFS文件夹中。 我的任务定义很简单

FROM nginx
EXPOSE 80
RUN mkdir /etc/nginx/html

通过ECS任务定义,我创建了一个卷,然后创建了一个安装点,这是一个简单的过程并且可以正常工作。问题出在入口点字段中,该字段应该包括我脚本的目录和脚本本身。

在我输入的ECS任务定义环境入口点字段中

sh,-c,/efs/docker-cmd-nginx.sh

而我的脚本如下

#!/bin/dash
cp /efs/nginx.conf /etc/nginx/ &&
nginx -g "daemon off;"

PS:问题可能出在:

  1. 我的脚本,在守护进程关闭时没有使用双引号;部分,但是我在整行nginx -g守护程序上使用了双引号;
  2. 我的脚本正在尝试重新加载尚未运行的nginx。
  3. 我尝试将命令分别放置在任务的入口点是错误的,肯定是语法上的,甚至是策略上的。