Назад | Перейти на главную страницу

Как подготовить новый контейнер LXC с помощью солончак?

У меня есть хост-сервер, на котором работает Jenkins. Я бы хотел, чтобы Дженкинс автоматически создавал новые контейнеры и готовил эти контейнеры с помощью SALT. Конечная цель - использовать эти контейнеры для тестирования кода.

Как лучше всего создать новый контейнер, установить salt-minion и затем снабдить сервер солью?

Я пробовал что-то вроде lxc-attach -n myContainer -- salt-call --local state.highstate но при этом у меня возникают проблемы. Если я запускаю lxc-attach -n [имя] - [команда] вручную в командной строке, это работает. Однако выполнение этого из сценария дает мне ошибки.

lxc-start -n "$1" -d
lxc-attach -n "$1" -- apt-get update

... приводит к ...

Starting the container 'test2'...
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty Release.gpg
  Could not resolve 'archive.ubuntu.com'
Err http://security.ubuntu.com trusty-security InRelease
Err http://security.ubuntu.com trusty-security Release.gpg
  Could not resolve 'security.ubuntu.com'
Err http://archive.ubuntu.com trusty-updates Release.gpg
  Could not resolve 'archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  

... и еще несколько ошибок. Я запускаю сценарий и команды вручную в командной строке от имени одного и того же пользователя.

Что я здесь делаю не так?

Похоже, я пытался запустить apt-get update слишком быстро после того, как я запустил контейнер (в фоновом режиме). Сеть, по-видимому, не готова, и все команды (которые полагались на сеть) не выполнялись.

Я добавил 5 секунд сна в сценарий подготовки, и он заработал.

lxc-start -n "$1" -d
sleet 5
lxc-attach -n "$1" -- apt-get update