Commit 189dd600 authored by Joshua Tauberer's avatar Joshua Tauberer

docker: re-run the start script on the container's first run because it won't...

docker: re-run the start script on the container's first run because it won't know its hostname or IP address until then
parent 3fdcbe54
...@@ -5,10 +5,11 @@ ...@@ -5,10 +5,11 @@
# To build the image: # To build the image:
# sudo docker.io build -t box . # sudo docker.io build -t box .
# To run a container for testing (with a command prompt and no publicly exposed ports): # Run your container the first time with an interactive console so you can
# sudo docker.io run -i -t -P box # create your first mail account.
# sudo docker.io run -i -t box
# Or to run in the background and expose all of the ports so that the *host* acts as a Mail-in-a-Box: # Then run it in the background and expose all of the ports so that the *host* acts as a Mail-in-a-Box:
# (the SSH port is only available locally, but other ports are exposed publicly and must be available # (the SSH port is only available locally, but other ports are exposed publicly and must be available
# otherwise the container won't start) # otherwise the container won't start)
# sudo docker.io run -d -p 22 -p 25:25 -p 53:53/udp -p 443:443 -p 587:587 -p 993:993 box # sudo docker.io run -d -p 22 -p 25:25 -p 53:53/udp -p 443:443 -p 587:587 -p 993:993 box
...@@ -18,9 +19,10 @@ MAINTAINER Joshua Tauberer (http://razor.occams.info) ...@@ -18,9 +19,10 @@ MAINTAINER Joshua Tauberer (http://razor.occams.info)
# We can't know these values ahead of time, so set them to something # We can't know these values ahead of time, so set them to something
# obviously local. The start.sh script will need to be run again once # obviously local. The start.sh script will need to be run again once
# these values are known. # these values are known. We use the IP address here as a flag that
# the configuration is incomplete.
ENV PUBLIC_HOSTNAME box.local ENV PUBLIC_HOSTNAME box.local
ENV PUBLIC_IP 127.0.123.123 ENV PUBLIC_IP 192.168.200.1
# Docker-specific Mail-in-a-Box configuration. # Docker-specific Mail-in-a-Box configuration.
ENV DISABLE_FIREWALL 1 ENV DISABLE_FIREWALL 1
......
#!/bin/bash #!/bin/bash
# The PUBLIC_HOSTNAME and PUBLIC_IP is not known at the time the docker
# image is built. On the first run of the container, re-run the start
# script with actual values. That will also ask the user for their first
# email user account.
if grep "^PUBLIC_IP=192.168.200.1" /etc/mailinabox.conf > /dev/null; then
echo "Configuring container on first run..."
# Get the public IP address of the host machine.
export PUBLIC_IP=`curl -s icanhazip.com`
echo Your IP address is $PUBLIC_IP.
# Get the reverse DNS of that IP address.
export PUBLIC_HOSTNAME=`host $PUBLIC_IP | sed -e "s/.* //" | sed -e "s/\.$//"`
echo Your hostname is $PUBLIC_HOSTNAME.
# Start configuration again.
cd /usr/local/mailinabox
scripts/start.sh
fi
echo "Starting Mail-in-a-Box services..." echo "Starting Mail-in-a-Box services..."
service nsd start service nsd start
......
...@@ -20,7 +20,9 @@ if grep -q "^PasswordAuthentication yes" /etc/ssh/sshd_config \ ...@@ -20,7 +20,9 @@ if grep -q "^PasswordAuthentication yes" /etc/ssh/sshd_config \
exit exit
fi fi
apt_install python3 # Install basic utilities.
apt_install python3 curl bind9-host
# Turn on basic services: # Turn on basic services:
# #
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment