Аргументы команды определения контейнера ECS / Fargate - PullRequest
0 голосов
/ 24 февраля 2019

Мы пытаемся запустить контейнер fargate на AWS ECS.В определении контейнера у нас есть

"command": [
        "/bin/bash",
        "-c",
        "\"envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'\""
      ]

Я также пытался:

"command": [
        "/bin/bash",
        "-c",
        "envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
      ]

Используя docker run, мы успешно использовали бы:

docker run -p 8000:80 -e "VAR1=somevalue" -d nginx-sample:latest /bin/bash -c "envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

И в кубернетахworld (который также работает):

 containers:
      env:
      - name: VAR1
        value: "somevalue"
      command: ["/bin/bash"]
      args: ["-c", "envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]

Мы не можем заставить это работать до сих пор в AWS Fargate.Мне не ясно, как мы должны правильно аргументировать.Контейнеры, по-видимому, выходят до возможности запуска, но очевидных сообщений журнала нет, поэтому не совсем понятно, почему.Я думаю, что-то не так с синтаксисом, когда передаются аргументы команды /bin/bash -c.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

В конце концов, правильный синтаксис (по крайней мере, тот, который хорошо сработал для нас) был:

"command": [
        "/bin/bash",
        "-c",
        "envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
      ],

Нашей реальной проблемой на самом деле оказалось то, что мы определили проверку работоспособности контейнера вдоль линийиз:

"healthCheck": {
        "retries": 5,
        "command": [
          "CMD-SHELL",
          "curl --fail http://localhost/health || exit 1"
        ],
        "timeout": 10,
        "interval": 30,
        "startPeriod": 30
      },

И мы забыли проверить, что curl действительно было установлено внутри контейнера.Мы считали само собой разумеющимся, что это будет там, но на изображении nginx:latest это не так - я полагаю, что справедливо для меньшего размера и меньшей поверхности атаки в качестве вектора эксплойтов.В итоге мы просто установили curl в Dockerfile, после этого все было хорошо.

0 голосов
/ 24 февраля 2019

Попробуйте этот подход

"entryPoint": [
        "/bin/bash",
        "-c"
      ],
"command": [
        "envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
      ],

Это сработало для нас, когда мы должны были сделать что-то подобное.

В нашем случае мы использовали entryPoint, чтобы заставить контейнер игнорировать базовое изображение команда.Затем дал дополнительную команду в command arry.

Если я не верю, ECS использует базовый образ CMD (CMD ["nginx", "-g", "daemon off;"]) и запускает что-либо в массиве command поверх этого.Я просто размышляю об этом;поскольку я не могу понять, почему другой способ просто не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...