Skip to content

Commit 47f11ab

Browse files
committed
Enable ipv6 listens on the containers where ipv6 is detected
This aims to fix nginx#394. IPv6 will not be enabled if /proc/net/if_inet6 is not available inside a container or a default.conf differs from the one installed by the package manager. Those who modify default.conf are considered savvy enough to enable ipv6 via custom configuration.
1 parent e36b4f5 commit 47f11ab

16 files changed

+488
-24
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
# vim:sw=4:ts=4:et
3+
4+
set -e
5+
6+
ME=$(basename $0)
7+
DEFAULT_CONF_FILE="etc/nginx/conf.d/default.conf"
8+
9+
# check if we have ipv6 available
10+
if [ -f "/proc/net/if_inet6" ]; then
11+
continue
12+
else
13+
echo "$ME: ipv6 not available, exiting" 1>&2
14+
exit 0
15+
fi
16+
17+
18+
if [ -f "/$DEFAULT_CONF_FILE" ]; then
19+
continue
20+
else
21+
echo "$ME: /$DEFAULT_CONF_FILE is not a file or does not exist, exiting" 1>&2
22+
exit 0
23+
fi
24+
25+
if [ -f "/etc/os-release" ]; then
26+
. /etc/os-release
27+
else
28+
echo "$ME: can not guess the operating system, exiting" 1>&2
29+
exit 0
30+
fi
31+
32+
echo "$ME: Getting the checksum of /$DEFAULT_CONF_FILE"
33+
34+
case "$ID" in
35+
"debian")
36+
CHECKSUM=$(dpkg-query --show --showformat='${Conffiles}\n' nginx | grep $DEFAULT_CONF_FILE | cut -d' ' -f 3)
37+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | md5sum -c - >/dev/null 2>&1 || {
38+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packaged version, exiting" 1>&2
39+
exit 0
40+
}
41+
;;
42+
"alpine")
43+
CHECKSUM=$(apk manifest nginx 2>/dev/null| grep $DEFAULT_CONF_FILE | cut -d' ' -f 1 | cut -d ':' -f 2)
44+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | sha1sum -c - >/dev/null 2>&1 || {
45+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packages version, exiting" 1>&2
46+
exit 0
47+
}
48+
;;
49+
*)
50+
echo "$ME: Unsupported distribution, exiting" 1>&2
51+
exit 0
52+
;;
53+
esac
54+
55+
# enable ipv6 on default.conf listen sockets
56+
sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' /$DEFAULT_CONF_FILE
57+
58+
echo "$ME: Enabled listen on IPv6 in /$DEFAULT_CONF_FILE"
59+
60+
exit 0

mainline/alpine-perl/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,11 @@ RUN set -x \
105105
# forward request and error logs to docker log collector
106106
&& ln -sf /dev/stdout /var/log/nginx/access.log \
107107
&& ln -sf /dev/stderr /var/log/nginx/error.log \
108-
# make default server listen on ipv6
109-
&& sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' \
110-
/etc/nginx/conf.d/default.conf \
111108
# create a docker-entrypoint.d directory
112109
&& mkdir /docker-entrypoint.d
113110

114111
COPY docker-entrypoint.sh /
112+
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d
115113
ENTRYPOINT ["/docker-entrypoint.sh"]
116114

117115
EXPOSE 80
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
# vim:sw=4:ts=4:et
3+
4+
set -e
5+
6+
ME=$(basename $0)
7+
DEFAULT_CONF_FILE="etc/nginx/conf.d/default.conf"
8+
9+
# check if we have ipv6 available
10+
if [ -f "/proc/net/if_inet6" ]; then
11+
continue
12+
else
13+
echo "$ME: ipv6 not available, exiting" 1>&2
14+
exit 0
15+
fi
16+
17+
18+
if [ -f "/$DEFAULT_CONF_FILE" ]; then
19+
continue
20+
else
21+
echo "$ME: /$DEFAULT_CONF_FILE is not a file or does not exist, exiting" 1>&2
22+
exit 0
23+
fi
24+
25+
if [ -f "/etc/os-release" ]; then
26+
. /etc/os-release
27+
else
28+
echo "$ME: can not guess the operating system, exiting" 1>&2
29+
exit 0
30+
fi
31+
32+
echo "$ME: Getting the checksum of /$DEFAULT_CONF_FILE"
33+
34+
case "$ID" in
35+
"debian")
36+
CHECKSUM=$(dpkg-query --show --showformat='${Conffiles}\n' nginx | grep $DEFAULT_CONF_FILE | cut -d' ' -f 3)
37+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | md5sum -c - >/dev/null 2>&1 || {
38+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packaged version, exiting" 1>&2
39+
exit 0
40+
}
41+
;;
42+
"alpine")
43+
CHECKSUM=$(apk manifest nginx 2>/dev/null| grep $DEFAULT_CONF_FILE | cut -d' ' -f 1 | cut -d ':' -f 2)
44+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | sha1sum -c - >/dev/null 2>&1 || {
45+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packages version, exiting" 1>&2
46+
exit 0
47+
}
48+
;;
49+
*)
50+
echo "$ME: Unsupported distribution, exiting" 1>&2
51+
exit 0
52+
;;
53+
esac
54+
55+
# enable ipv6 on default.conf listen sockets
56+
sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' /$DEFAULT_CONF_FILE
57+
58+
echo "$ME: Enabled listen on IPv6 in /$DEFAULT_CONF_FILE"
59+
60+
exit 0

mainline/alpine/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,11 @@ RUN set -x \
104104
# forward request and error logs to docker log collector
105105
&& ln -sf /dev/stdout /var/log/nginx/access.log \
106106
&& ln -sf /dev/stderr /var/log/nginx/error.log \
107-
# make default server listen on ipv6
108-
&& sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' \
109-
/etc/nginx/conf.d/default.conf \
110107
# create a docker-entrypoint.d directory
111108
&& mkdir /docker-entrypoint.d
112109

113110
COPY docker-entrypoint.sh /
111+
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d
114112
ENTRYPOINT ["/docker-entrypoint.sh"]
115113

116114
EXPOSE 80
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
# vim:sw=4:ts=4:et
3+
4+
set -e
5+
6+
ME=$(basename $0)
7+
DEFAULT_CONF_FILE="etc/nginx/conf.d/default.conf"
8+
9+
# check if we have ipv6 available
10+
if [ -f "/proc/net/if_inet6" ]; then
11+
continue
12+
else
13+
echo "$ME: ipv6 not available, exiting" 1>&2
14+
exit 0
15+
fi
16+
17+
18+
if [ -f "/$DEFAULT_CONF_FILE" ]; then
19+
continue
20+
else
21+
echo "$ME: /$DEFAULT_CONF_FILE is not a file or does not exist, exiting" 1>&2
22+
exit 0
23+
fi
24+
25+
if [ -f "/etc/os-release" ]; then
26+
. /etc/os-release
27+
else
28+
echo "$ME: can not guess the operating system, exiting" 1>&2
29+
exit 0
30+
fi
31+
32+
echo "$ME: Getting the checksum of /$DEFAULT_CONF_FILE"
33+
34+
case "$ID" in
35+
"debian")
36+
CHECKSUM=$(dpkg-query --show --showformat='${Conffiles}\n' nginx | grep $DEFAULT_CONF_FILE | cut -d' ' -f 3)
37+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | md5sum -c - >/dev/null 2>&1 || {
38+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packaged version, exiting" 1>&2
39+
exit 0
40+
}
41+
;;
42+
"alpine")
43+
CHECKSUM=$(apk manifest nginx 2>/dev/null| grep $DEFAULT_CONF_FILE | cut -d' ' -f 1 | cut -d ':' -f 2)
44+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | sha1sum -c - >/dev/null 2>&1 || {
45+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packages version, exiting" 1>&2
46+
exit 0
47+
}
48+
;;
49+
*)
50+
echo "$ME: Unsupported distribution, exiting" 1>&2
51+
exit 0
52+
;;
53+
esac
54+
55+
# enable ipv6 on default.conf listen sockets
56+
sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' /$DEFAULT_CONF_FILE
57+
58+
echo "$ME: Enabled listen on IPv6 in /$DEFAULT_CONF_FILE"
59+
60+
exit 0

mainline/buster-perl/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,11 @@ RUN set -x \
9696
# forward request and error logs to docker log collector
9797
&& ln -sf /dev/stdout /var/log/nginx/access.log \
9898
&& ln -sf /dev/stderr /var/log/nginx/error.log \
99-
# make default server listen on ipv6
100-
&& sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' \
101-
/etc/nginx/conf.d/default.conf \
10299
# create a docker-entrypoint.d directory
103100
&& mkdir /docker-entrypoint.d
104101

105102
COPY docker-entrypoint.sh /
103+
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d
106104
ENTRYPOINT ["/docker-entrypoint.sh"]
107105

108106
EXPOSE 80
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
# vim:sw=4:ts=4:et
3+
4+
set -e
5+
6+
ME=$(basename $0)
7+
DEFAULT_CONF_FILE="etc/nginx/conf.d/default.conf"
8+
9+
# check if we have ipv6 available
10+
if [ -f "/proc/net/if_inet6" ]; then
11+
continue
12+
else
13+
echo "$ME: ipv6 not available, exiting" 1>&2
14+
exit 0
15+
fi
16+
17+
18+
if [ -f "/$DEFAULT_CONF_FILE" ]; then
19+
continue
20+
else
21+
echo "$ME: /$DEFAULT_CONF_FILE is not a file or does not exist, exiting" 1>&2
22+
exit 0
23+
fi
24+
25+
if [ -f "/etc/os-release" ]; then
26+
. /etc/os-release
27+
else
28+
echo "$ME: can not guess the operating system, exiting" 1>&2
29+
exit 0
30+
fi
31+
32+
echo "$ME: Getting the checksum of /$DEFAULT_CONF_FILE"
33+
34+
case "$ID" in
35+
"debian")
36+
CHECKSUM=$(dpkg-query --show --showformat='${Conffiles}\n' nginx | grep $DEFAULT_CONF_FILE | cut -d' ' -f 3)
37+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | md5sum -c - >/dev/null 2>&1 || {
38+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packaged version, exiting" 1>&2
39+
exit 0
40+
}
41+
;;
42+
"alpine")
43+
CHECKSUM=$(apk manifest nginx 2>/dev/null| grep $DEFAULT_CONF_FILE | cut -d' ' -f 1 | cut -d ':' -f 2)
44+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | sha1sum -c - >/dev/null 2>&1 || {
45+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packages version, exiting" 1>&2
46+
exit 0
47+
}
48+
;;
49+
*)
50+
echo "$ME: Unsupported distribution, exiting" 1>&2
51+
exit 0
52+
;;
53+
esac
54+
55+
# enable ipv6 on default.conf listen sockets
56+
sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' /$DEFAULT_CONF_FILE
57+
58+
echo "$ME: Enabled listen on IPv6 in /$DEFAULT_CONF_FILE"
59+
60+
exit 0

mainline/buster/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,11 @@ RUN set -x \
9595
# forward request and error logs to docker log collector
9696
&& ln -sf /dev/stdout /var/log/nginx/access.log \
9797
&& ln -sf /dev/stderr /var/log/nginx/error.log \
98-
# make default server listen on ipv6
99-
&& sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' \
100-
/etc/nginx/conf.d/default.conf \
10198
# create a docker-entrypoint.d directory
10299
&& mkdir /docker-entrypoint.d
103100

104101
COPY docker-entrypoint.sh /
102+
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d
105103
ENTRYPOINT ["/docker-entrypoint.sh"]
106104

107105
EXPOSE 80
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
# vim:sw=4:ts=4:et
3+
4+
set -e
5+
6+
ME=$(basename $0)
7+
DEFAULT_CONF_FILE="etc/nginx/conf.d/default.conf"
8+
9+
# check if we have ipv6 available
10+
if [ -f "/proc/net/if_inet6" ]; then
11+
continue
12+
else
13+
echo "$ME: ipv6 not available, exiting" 1>&2
14+
exit 0
15+
fi
16+
17+
18+
if [ -f "/$DEFAULT_CONF_FILE" ]; then
19+
continue
20+
else
21+
echo "$ME: /$DEFAULT_CONF_FILE is not a file or does not exist, exiting" 1>&2
22+
exit 0
23+
fi
24+
25+
if [ -f "/etc/os-release" ]; then
26+
. /etc/os-release
27+
else
28+
echo "$ME: can not guess the operating system, exiting" 1>&2
29+
exit 0
30+
fi
31+
32+
echo "$ME: Getting the checksum of /$DEFAULT_CONF_FILE"
33+
34+
case "$ID" in
35+
"debian")
36+
CHECKSUM=$(dpkg-query --show --showformat='${Conffiles}\n' nginx | grep $DEFAULT_CONF_FILE | cut -d' ' -f 3)
37+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | md5sum -c - >/dev/null 2>&1 || {
38+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packaged version, exiting" 1>&2
39+
exit 0
40+
}
41+
;;
42+
"alpine")
43+
CHECKSUM=$(apk manifest nginx 2>/dev/null| grep $DEFAULT_CONF_FILE | cut -d' ' -f 1 | cut -d ':' -f 2)
44+
echo "$CHECKSUM /$DEFAULT_CONF_FILE" | sha1sum -c - >/dev/null 2>&1 || {
45+
echo "$ME: /$DEFAULT_CONF_FILE differs from the packages version, exiting" 1>&2
46+
exit 0
47+
}
48+
;;
49+
*)
50+
echo "$ME: Unsupported distribution, exiting" 1>&2
51+
exit 0
52+
;;
53+
esac
54+
55+
# enable ipv6 on default.conf listen sockets
56+
sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' /$DEFAULT_CONF_FILE
57+
58+
echo "$ME: Enabled listen on IPv6 in /$DEFAULT_CONF_FILE"
59+
60+
exit 0

stable/alpine-perl/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,11 @@ RUN set -x \
105105
# forward request and error logs to docker log collector
106106
&& ln -sf /dev/stdout /var/log/nginx/access.log \
107107
&& ln -sf /dev/stderr /var/log/nginx/error.log \
108-
# make default server listen on ipv6
109-
&& sed -i -E 's,listen 80;,listen 80;\n listen [::]:80;,' \
110-
/etc/nginx/conf.d/default.conf \
111108
# create a docker-entrypoint.d directory
112109
&& mkdir /docker-entrypoint.d
113110

114111
COPY docker-entrypoint.sh /
112+
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d
115113
ENTRYPOINT ["/docker-entrypoint.sh"]
116114

117115
EXPOSE 80

0 commit comments

Comments
 (0)