LXD containers are brilliant, but lacks an easy way to forward ports from the containers to the host. One can use iptables manually, of course, but I really missed something easy like Docker. To try and remedy this, I have conjured up a little bash script. With this script, you can add, delete and list port forwarding rules.

It’s a bit rough around the edges, but maybe I’ll tidy it up a bit some day.

Read on for the script and examples.

Adding a rule

Let’s say you have an SMTP server running in a container named ‘mailbox’. To forward port 25 on the container to port 25 on the host, just do this:

$ lxd-forward add mailbox 25

Another example, what if you have a web server running in the container ‘tomcat’, on port 8080, and want it forwarded to port 80 on the host?

$ lxd-forward add tomcat 8080 80

Listing rules

To list rules, simply type:

$ lxd-forward list

Sample output:

Rule #  LXD     IP              Host    Container
2       kolab   172.29.46.196   143     143

Deleting a rule

To delete a rule, get the rule number from the ‘list’ command, e.g. 2, and do:

$ lxd-forward delete 2

The script

Here’s the whole thing. Keep in mind that some things are hard coded, like the ethernet device, so some modification may be required for it to run in another environment.