запустить docker-compose в пользовательских данных EC2

У меня есть экземпляр EC2 linux2, содержащий dokcer compose. Я хочу, чтобы экземпляр запускал службу Docker, переходил в нужную папку, а затем запускал docker-compose up -d, три простые строки при каждом запуске экземпляра:

sudo service docker start
cd APP
docker-compose up -d

Как показано здесь, ввод этого в данные пользователя, когда экземпляр остановлен, должен работать:

#!/bin/bash
sudo service docker start
cd APP
docker-compose up -d

Но это ничего не делает. В документе aws также есть этот скрипт:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt  <<<<<<<<------- ACTUAL USER SCRIPT
--//

Когда я вставляю свои три строки вместо строки hello world, работает только первая, запускающая службу докеров.

Я новичок в Linux, поэтому, вероятно, мне не хватает чего-то небольшого.

Спасибо

РЕДАКТИРОВАТЬ Спасибо, ребята, за вашу помощь, проблема действительно в пути к каталогу APP.


person Ehud Grand    schedule 29.07.2020    source источник
comment
С вашего хоста перейдите на /var/log/cloud-init-output. log. Это будет содержать ошибки, выведенные в ваших пользовательских данных   -  person Chris Williams    schedule 29.07.2020
comment
Сценарий пользовательских данных работает как root, а не как ec2-user, поэтому пути оболочки и домашние каталоги будут другими. Из-за этого вам действительно следует использовать абсолютные пути в сценариях пользовательских данных. Например, cd APP может быть cd /home/ec2-user/APP?   -  person Mark B    schedule 29.07.2020


Ответы (1)


ввод этого в пользовательские данные, когда экземпляр остановлен, должен работать

Первая попытка, к сожалению, не сработает. Это связано с тем, что UserData выполняется только при появлении нового экземпляра запущен.

Когда я вставляю свои три строки вместо строки приветствия, только первая

Вторая попытка не удалась, так как этот скрипт выполняется как root в папке / (корень файловой системы). Поэтому, если ваше приложение не находится в /APP, это не сработает.

person Marcin    schedule 29.07.2020