.. _port forward:
Forward a Port
==============
A forwarded port makes a service inside a VM instance reachable from the host.
This guide forwards host port 8080 to guest port 80 and runs nginx as the
service behind it, so you can reach it from a browser or curl.
Create the VM Instance
----------------------
Create a VM instance with port forwarding, so that host port 8080 maps to guest
port 80:
.. code-block::
$ cubic create webserver --image debian:trixie --port 8080:80
Start the VM Instance
----------------------
.. code-block::
$ cubic start webserver
Install nginx
-------------
Connect to the VM instance over SSH and install nginx:
.. code-block::
$ cubic ssh webserver
$ sudo apt update && sudo apt install -y nginx
nginx starts automatically after installation and listens on port 80 inside
the VM instance.
Verify from the Host
--------------------
Open a new terminal on the host and send a request to port 8080:
.. code-block::
$ curl http://localhost:8080
Welcome to nginx!
[...]
You can also open ``http://localhost:8080`` in a browser.
Show the Settings
-----------------
Use ``cubic show --all`` to inspect the full configuration of a VM instance,
including every port forwarding rule:
.. code-block::
$ cubic show --all webserver
Running: yes
Arch: amd64
CPUs: 4
Memory: 4096 M
Disk Used: 1229 M
Disk Total: 100 G
User: alice
Isolated: no
SSH Port: 10022
Monitor Port: 10023
Console Port: 10024
Forward: 127.0.0.1:8080:80/tcp
PID: 12345
Disk Image: ~/.local/share/cubic/machines/webserver/machine.img
Config: ~/.local/share/cubic/machines/webserver/instance.toml
SSH Key: ~/.local/share/cubic/machines/webserver/ssh_client_key
SSH: ssh -i .../webserver/ssh_client_key -p 10022 alice@localhost
The paths belong to a Linux host. :ref:`file locations` names the directory of
each platform.
Change a Forward
----------------
``cubic modify`` adds and removes forwards at any time. On a running VM instance
the host port opens and closes right away, so no restart is needed.
Add a forward for HTTPS:
.. code-block::
$ cubic modify webserver --port 8443:443
Remove the HTTP forward:
.. code-block::
$ cubic modify webserver --rm-port 8080:80
When the VM instance is running the command prints a note that changes may
require a restart. It applies to the other settings of a VM instance, such as
CPUs and memory, not to the forwards.
List the Forwards
-----------------
``cubic ports`` lists the forwards of every VM instance and whether the host
port is in use:
.. code-block::
$ cubic ports
Instance Host Guest Protocol In Use
webserver 127.0.0.1:8080 :80 /tcp yes
Related
-------
* :ref:`resources` of the VM instance
* :ref:`ssh connect` instead of ``cubic ssh``