• Infrastructure
    • terraform
    • packer
  • Networking
    • consul
  • Security
    • vault
    • boundary
  • Applications
    • nomad
    • waypoint
    • vagrant
  • HashiCorp Cloud Platform

    A fully managed platform to automate infrastructure on any cloud with HashiCorp products.

    • consul
    • terraform
    • vault
    • packerbeta
    Visit cloud.hashicorp.com
  • Overview
  • Tutorials
  • Docs
  • Plugins
  • Community
GitHubInstall PackerTry HCP Packer
  • About External Plugins

      • 1&1
      • Alicloud ECS
      • Alicloud Import
      • Anka Registry Push
      • VM Clone
      • VM Create
      • Ansible (Remote)
      • Ansible Local
      • Overview
      • Amazon AMI
      • Parameter Store
      • Secrets Manager
      • Overview
      • chroot
      • EBS
      • EBS Surrogate
      • EBS Volume
      • Instance
      • Amazon Import
      • Overview
      • ARM
      • chroot
      • DTL
      • Azure DTL Artifact
      • Chef Client
      • Chef Solo
      • CloudStack
      • Converge
      • digitalocean
      • digitalocean-import
      • Docker
      • Docker Import
      • Docker Push
      • Docker Save
      • Docker Tag
      • Overview
      • Commit
      • Repository
      • Tree
      • Google Cloud Platform
      • googlecompute-export
      • googlecompute-import
      • Overview
      • Receipt
      • Overview
      • Toppings
      • Overview
      • Coffees
      • Ingredients
      • Overview
      • Order
      • Hetzner Cloud
      • HuaweiCloud
      • HyperOne
      • Overview
      • ISO
      • VMCX
      • InSpec
      • JDCloud
      • Kamatera
      • Linode
      • Libvirt
      • LXC
      • LXD
      • Naver Cloud
      • OpenStack
      • Overview
      • Classic
      • OCI
      • Overview
      • BSU
      • BSU Surrogate
      • BSU Volume
      • chroot
      • Overview
      • ISO
      • PVM
      • ProfitBricks
      • Overview
      • Clone
      • ISO
      • Puppet Masterless
      • Puppet Server
      • QEMU
      • Salt Masterless
      • Scaleway
      • SSH Key
      • Tencent Cloud
      • Triton
      • UCloud
      • UCloud Import
      • upcloud
      • upcloud-import
      • Vagrant
      • Vagrant
      • Vagrant Cloud
      • Overview
      • ISO
      • OVF
      • VM
      • Overview
      • Clone
      • ISO
      • vSphere
      • vSphere Template
      • Overview
      • ISO
      • VMX
      • Vultr
      • Yandex
      • yandex-export
      • yandex-import
Type '/' to Search
Community
v1.0.1

LXC Builder

Type: lxc Artifact BuilderId: ustream.lxc

The lxc Packer builder builds containers for lxc1. The builder starts an LXC container, runs provisioners within this container, then exports the container as a tar.gz of the root file system.

The LXC builder requires a modern linux kernel and the lxc or lxc1 package. This builder does not work with LXD.

~> Note: to build Centos images on a Debian family host, you will need the yum package installed.
Some provisioners such as ansible-local get confused when running in a container of a different family. E.G. it will attempt to use apt-get to install packages, when running in a Centos container if the parent OS is Debian based.

Basic Example

Below is a fully functioning example.

{
  "builders": [
    {
      "type": "lxc",
      "name": "lxc-trusty",
      "config_file": "/tmp/lxc/config",
      "template_name": "ubuntu",
      "template_environment_vars": ["SUITE=trusty"]
    },
    {
      "type": "lxc",
      "name": "lxc-xenial",
      "config_file": "/tmp/lxc/config",
      "template_name": "ubuntu",
      "template_environment_vars": ["SUITE=xenial"]
    },
    {
      "type": "lxc",
      "name": "lxc-jessie",
      "config_file": "/tmp/lxc/config",
      "template_name": "debian",
      "template_environment_vars": ["SUITE=jessie"]
    },
    {
      "type": "lxc",
      "name": "lxc-centos-7-x64",
      "config_file": "/tmp/lxc/config",
      "template_name": "centos",
      "template_parameters": ["-R", "7", "-a", "x86_64"]
    }
  ]
}
{
  "builders": [
    {
      "type": "lxc",
      "name": "lxc-trusty",
      "config_file": "/tmp/lxc/config",
      "template_name": "ubuntu",
      "template_environment_vars": ["SUITE=trusty"]
    },
    {
      "type": "lxc",
      "name": "lxc-xenial",
      "config_file": "/tmp/lxc/config",
      "template_name": "ubuntu",
      "template_environment_vars": ["SUITE=xenial"]
    },
    {
      "type": "lxc",
      "name": "lxc-jessie",
      "config_file": "/tmp/lxc/config",
      "template_name": "debian",
      "template_environment_vars": ["SUITE=jessie"]
    },
    {
      "type": "lxc",
      "name": "lxc-centos-7-x64",
      "config_file": "/tmp/lxc/config",
      "template_name": "centos",
      "template_parameters": ["-R", "7", "-a", "x86_64"]
    }
  ]
}

Configuration Reference

Required:

  • config_file (string) - The path to the lxc configuration file.

  • template_name (string) - The LXC template name to use.

  • template_environment_vars (array of strings) - Environmental variables to use to build the template with.

Optional:

  • target_runlevel (number) - The minimum run level to wait for the container to reach. Note some distributions (Ubuntu) simulate run levels and may report 5 rather than 3.

  • output_directory (string) - The directory in which to save the exported tar.gz. Defaults to output-<BuildName> in the current directory.

  • container_name (string) - The name of the LXC container. Usually stored in /var/lib/lxc/containers/<container_name>. Defaults to packer-<BuildName>.

  • command_wrapper (string) - Allows you to specify a wrapper command, such as ssh so you can execute Packer builds on a remote host. Defaults to Empty.

  • init_timeout (string) - The timeout in seconds to wait for the the container to start. Defaults to 20 seconds.

  • template_parameters (array of strings) - Options to pass to the given lxc-template command, usually located in /usr/share/lxc/templates/lxc-<template_name>. Note: This gets passed as ARGV to the template command. Ensure you have an array of strings, as a single string with spaces probably won't work. Defaults to [].

  • create_options (array of strings) - Options to pass to lxc-create. For instance, you can specify a custom LXC container configuration file with ["-f", "/path/to/lxc.conf"]. Defaults to []. See man 1 lxc-create for available options.

  • start_options (array of strings) - Options to pass to lxc-start. For instance, you can override parameters from the LXC container configuration file via ["--define", "KEY=VALUE"]. Defaults to []. See man 1 lxc-start for available options.

  • attach_options (array of strings) - Options to pass to lxc-attach. For instance, you can prevent the container from inheriting the host machine's environment by specifying ["--clear-env"]. Defaults to []. See man 1 lxc-attach for available options.

github logoEdit this page
IntroGuidesDocsCommunityPrivacySecurityPress KitConsent Manager