x
This commit is contained in:
parent
610aa0d51b
commit
a45500b404
1 changed files with 103 additions and 0 deletions
103
os/FreeBSD/Podman.md
Normal file
103
os/FreeBSD/Podman.md
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
# Podman
|
||||||
|
|
||||||
|
Podman! On FreeBSD!
|
||||||
|
|
||||||
|
# Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pkg install podman-suite
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
Repeat the messages:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pkg info -D containers-common podman podman-suite
|
||||||
|
```
|
||||||
|
|
||||||
|
Follow the instructions for creating the zfs mount point, enabling podman and Linux.
|
||||||
|
|
||||||
|
Then PF:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cp /usr/local/etc/containers/pf.conf.sample /etc/pf.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit it. I added my own rules too:
|
||||||
|
|
||||||
|
```pf
|
||||||
|
v4egress_if = "em0"
|
||||||
|
v6egress_if = "em0"
|
||||||
|
|
||||||
|
nat on $v4egress_if inet from <cni-nat> to any -> ($v4egress_if)
|
||||||
|
nat on $v6egress_if inet6 from <cni-nat> to !ff00::/8 -> ($v6egress_if)
|
||||||
|
|
||||||
|
rdr-anchor "cni-rdr/*"
|
||||||
|
nat-anchor "cni-rdr/*"
|
||||||
|
table <cni-nat>
|
||||||
|
|
||||||
|
# My rules
|
||||||
|
block in all
|
||||||
|
|
||||||
|
ext_if="em0"
|
||||||
|
|
||||||
|
pass in on $ext_if proto tcp to ($ext_if) port 22
|
||||||
|
pass in on $ext_if proto tcp to ($ext_if) port 80
|
||||||
|
pass in on $ext_if proto tcp to ($ext_if) port 443
|
||||||
|
|
||||||
|
tailscale_if="tailscale0"
|
||||||
|
pass in on $tailscale_if proto tcp to any port 22
|
||||||
|
|
||||||
|
pass out all keep state
|
||||||
|
```
|
||||||
|
|
||||||
|
# Run
|
||||||
|
|
||||||
|
Run a Freebsd container:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
podman run --rm quay.io/dougrabson/hello
|
||||||
|
```
|
||||||
|
|
||||||
|
Run a Linux container. Note that when you want to run something from docker you qualify it with `docker.io`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
podman run --rm --os=linux docker.io/alpine cat /etc/os-release | head -1
|
||||||
|
```
|
||||||
|
|
||||||
|
# Networking
|
||||||
|
|
||||||
|
If you run a container, it will use the default network podman which has a subnet of `10.88.0.0/16`, for example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
podman run --rm --os=linux docker.io/httpd
|
||||||
|
```
|
||||||
|
|
||||||
|
Will give you
|
||||||
|
|
||||||
|
```
|
||||||
|
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.8. Set the 'ServerName' directive globally to suppress this message
|
||||||
|
```
|
||||||
|
|
||||||
|
This message actually comes from the Apache Web Server, so that's useful. You can only access it from the same machine though:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 10.88.0.8
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to expose it externally, like we do on our Linux box, you need to attach it to the host network:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
podman run --rm --os=linux --network=host docker.io/httpd
|
||||||
|
```
|
||||||
|
|
||||||
|
Then Apache complains:
|
||||||
|
|
||||||
|
```
|
||||||
|
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
|
||||||
|
```
|
||||||
|
|
||||||
|
I can now access the website on the host machine:
|
||||||
|
|
||||||
|
* http://192.168.1.10/
|
||||||
Loading…
Add table
Reference in a new issue