Docker: show welcome page on port 80 when entrypoint.d is empty.
The entrypoint script now performs a default configuration when no useful files are found in /docker-entrypoint.d/ The default configuration serves a welcome page in response to all requests, using Markdown unless text/html is sent in the Accept header. This provides a useful 'hello world' experience when running a Unit container for the first time.
This commit is contained in:
@@ -25,21 +25,23 @@ if [ "$1" = "unitd" ] || [ "$1" = "unitd-debug" ]; then
|
|||||||
if /usr/bin/find "/var/lib/unit/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
|
if /usr/bin/find "/var/lib/unit/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
|
||||||
echo "$0: /var/lib/unit/ is not empty, skipping initial configuration..."
|
echo "$0: /var/lib/unit/ is not empty, skipping initial configuration..."
|
||||||
else
|
else
|
||||||
if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
|
echo "$0: Launching Unit daemon to perform initial configuration..."
|
||||||
echo "$0: /docker-entrypoint.d/ is not empty, launching Unit daemon to perform initial configuration..."
|
/usr/sbin/$1 --control unix:/var/run/control.unit.sock
|
||||||
/usr/sbin/$1 --control unix:/var/run/control.unit.sock
|
|
||||||
|
|
||||||
for i in $(/usr/bin/seq $WAITLOOPS); do
|
for i in $(/usr/bin/seq $WAITLOOPS); do
|
||||||
if [ ! -S /var/run/control.unit.sock ]; then
|
if [ ! -S /var/run/control.unit.sock ]; then
|
||||||
echo "$0: Waiting for control socket to be created..."
|
echo "$0: Waiting for control socket to be created..."
|
||||||
/bin/sleep $SLEEPSEC
|
/bin/sleep $SLEEPSEC
|
||||||
else
|
else
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
# even when the control socket exists, it does not mean unit has finished initialisation
|
# even when the control socket exists, it does not mean unit has finished initialisation
|
||||||
# this curl call will get a reply once unit is fully launched
|
# this curl call will get a reply once unit is fully launched
|
||||||
/usr/bin/curl -f -s -X GET --unix-socket /var/run/control.unit.sock http://localhost/
|
/usr/bin/curl -s -X GET --unix-socket /var/run/control.unit.sock http://localhost/
|
||||||
|
|
||||||
|
if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
|
||||||
|
echo "$0: /docker-entrypoint.d/ is not empty, applying initial configuration..."
|
||||||
|
|
||||||
echo "$0: Looking for certificate bundles in /docker-entrypoint.d/..."
|
echo "$0: Looking for certificate bundles in /docker-entrypoint.d/..."
|
||||||
for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.pem"); do
|
for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.pem"); do
|
||||||
@@ -69,29 +71,30 @@ if [ "$1" = "unitd" ] || [ "$1" = "unitd-debug" ]; then
|
|||||||
for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh" -not -name "*.json" -not -name "*.pem" -not -name "*.js"); do
|
for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh" -not -name "*.json" -not -name "*.pem" -not -name "*.js"); do
|
||||||
echo "$0: Ignoring $f";
|
echo "$0: Ignoring $f";
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "$0: Stopping Unit daemon after initial configuration..."
|
|
||||||
kill -TERM $(/bin/cat /var/run/unit.pid)
|
|
||||||
|
|
||||||
for i in $(/usr/bin/seq $WAITLOOPS); do
|
|
||||||
if [ -S /var/run/control.unit.sock ]; then
|
|
||||||
echo "$0: Waiting for control socket to be removed..."
|
|
||||||
/bin/sleep $SLEEPSEC
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ -S /var/run/control.unit.sock ]; then
|
|
||||||
kill -KILL $(/bin/cat /var/run/unit.pid)
|
|
||||||
rm -f /var/run/control.unit.sock
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "$0: Unit initial configuration complete; ready for start up..."
|
|
||||||
echo
|
|
||||||
else
|
else
|
||||||
echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration..."
|
echo "$0: /docker-entrypoint.d/ is empty, creating 'welcome' configuration..."
|
||||||
|
curl_put /usr/share/unit/welcome/welcome.json "config"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "$0: Stopping Unit daemon after initial configuration..."
|
||||||
|
kill -TERM $(/bin/cat /var/run/unit.pid)
|
||||||
|
|
||||||
|
for i in $(/usr/bin/seq $WAITLOOPS); do
|
||||||
|
if [ -S /var/run/control.unit.sock ]; then
|
||||||
|
echo "$0: Waiting for control socket to be removed..."
|
||||||
|
/bin/sleep $SLEEPSEC
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -S /var/run/control.unit.sock ]; then
|
||||||
|
kill -KILL $(/bin/cat /var/run/unit.pid)
|
||||||
|
rm -f /var/run/control.unit.sock
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "$0: Unit initial configuration complete; ready for start up..."
|
||||||
|
echo
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -75,9 +75,10 @@ RUN set -ex \
|
|||||||
&& ln -sf /dev/stdout /var/log/unit.log
|
&& ln -sf /dev/stdout /var/log/unit.log
|
||||||
|
|
||||||
COPY docker-entrypoint.sh /usr/local/bin/
|
COPY docker-entrypoint.sh /usr/local/bin/
|
||||||
|
COPY welcome.* /usr/share/unit/welcome/
|
||||||
|
|
||||||
STOPSIGNAL SIGTERM
|
STOPSIGNAL SIGTERM
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
||||||
|
EXPOSE 80
|
||||||
CMD ["unitd", "--no-daemon", "--control", "unix:/var/run/control.unit.sock"]
|
CMD ["unitd", "--no-daemon", "--control", "unix:/var/run/control.unit.sock"]
|
||||||
|
|||||||
45
pkg/docker/welcome.html
Normal file
45
pkg/docker/welcome.html
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Welcome to NGINX Unit</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body { background: white; color: black; font-family: sans-serif; margin: 2em; line-height: 1.5; }
|
||||||
|
h1,h2 { color: #00974d; }
|
||||||
|
li { margin-bottom: 0.5em; }
|
||||||
|
pre { background-color: beige; padding: 0.4em; }
|
||||||
|
hr { margin-top: 2em; border: 1px solid #00974d; }
|
||||||
|
.indent { margin-left: 1.5em; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Welcome to NGINX Unit</h1>
|
||||||
|
<p>Congratulations! NGINX Unit is installed and running.</p>
|
||||||
|
<h3>Useful Links</h3>
|
||||||
|
<ul>
|
||||||
|
<li><b><a href="https://unit.nginx.org/configuration/?referer=welcome&platform=docker">https://unit.nginx.org/configuration/</a></b><br>
|
||||||
|
To get started with Unit, see the <em>Configuration</em> docs, starting with
|
||||||
|
the <em>Quick Start</em> guide.</li>
|
||||||
|
<li><b><a href="https://unit.nginx.org/howto/docker/?referer=welcome&platform=docker">https://unit.nginx.org/howto/docker/</a></b><br>
|
||||||
|
For guidance about running <em>Unit in Docker</em> and tips for containerized
|
||||||
|
applications.
|
||||||
|
<li><b><a href="https://github.com/nginx/unit">https://github.com/nginx/unit</a></b><br>
|
||||||
|
See our GitHub repo to browse the code, contribute, or seek help from the
|
||||||
|
<a href="https://github.com/nginx/unit#community">community</a>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Next steps</h2>
|
||||||
|
|
||||||
|
<h3>Check Current Configuration</h3>
|
||||||
|
<div class="indent">
|
||||||
|
<p>Unit's control API is currently listening for configuration changes
|
||||||
|
on the <a href="https://en.wikipedia.org/wiki/Unix_domain_socket">Unix socket</a> at
|
||||||
|
<b>/var/run/control.unit.sock</b> inside the container.<br>
|
||||||
|
To see the current configuration run:</p>
|
||||||
|
<pre>docker exec -ti <containerID> curl --unix-socket /var/run/control.unit.sock http://localhost/config</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<p><a href="https://unit.nginx.org/?referer=welcome&platform=docker">NGINX Unit — the universal web app server</a><br>
|
||||||
|
NGINX, Inc. © 2023</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
25
pkg/docker/welcome.json
Normal file
25
pkg/docker/welcome.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"listeners": {
|
||||||
|
"*:80": {
|
||||||
|
"pass": "routes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"headers": {
|
||||||
|
"accept": "*text/html*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"action": {
|
||||||
|
"share": "/usr/share/unit/welcome/welcome.html"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": {
|
||||||
|
"share": "/usr/share/unit/welcome/welcome.md"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
29
pkg/docker/welcome.md
Normal file
29
pkg/docker/welcome.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Welcome to NGINX Unit
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Congratulations! NGINX Unit is installed and running.
|
||||||
|
|
||||||
|
Useful Links
|
||||||
|
------------
|
||||||
|
|
||||||
|
* https://unit.nginx.org/
|
||||||
|
- Get started with the 'Configuration' docs, starting with the 'Quick Start' guide.
|
||||||
|
|
||||||
|
* https://unit.nginx.org/howto/docker/
|
||||||
|
- Guidance for running Unit in a container and tips for containerized applications.
|
||||||
|
|
||||||
|
* https://github.com/nginx/unit
|
||||||
|
- See our GitHub repo to browse the code, contribute, or seek help from the community.
|
||||||
|
|
||||||
|
Current Configuration
|
||||||
|
---------------------
|
||||||
|
Unit's control API is currently listening for configuration changes on the Unix socket at
|
||||||
|
`/var/run/control.unit.sock` inside the container.
|
||||||
|
|
||||||
|
Read the current configuration with
|
||||||
|
```
|
||||||
|
docker exec -ti <containerID> curl --unix-socket /var/run/control.unit.sock http://localhost/config
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
NGINX Unit - the universal web app server
|
||||||
Reference in New Issue
Block a user