Я пытаюсь запустить apache2 внутри докера, однако, когда я открываю порты, служба доступна только с хоста, а не снаружи.
Я выполнил контейнер по:
docker run -d -t -p 8080:80 --name ctf ubuntu
После этого я установил apache2 внутри:
apt-get update && apt-get install apache2 -y && service apache2 start
При запуске docker ps
я получу:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c90b8ed41436 ubuntu "/bin/bash" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp ctf
Я могу связаться со службой по wget <public ip>:8080
от этого хозяина. Но если я попытаюсь, если с другого устройства в той же сети, он не работает. Служба недоступна.
Также команда iptables --list
выдаст:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:openvpn
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- 10.8.0.0/24 anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Знаете ли вы, где может быть проблема?
РЕДАКТИРОВАТЬ:
EDIT2: Результат из netstat -ntlp
, кажется, что докер не привязывает сокет к IPv4:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 423/./ts3server
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 13863/mysqld
tcp 0 0 127.0.0.1:37995 0.0.0.0:* LISTEN 15022/containerd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1577/apache2
tcp 0 0 0.0.0.0:30033 0.0.0.0:* LISTEN 423/./ts3server
tcp 0 0 0.0.0.0:8084 0.0.0.0:* LISTEN 1552/mono
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 19145/systemd-resol
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1561/sshd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1577/apache2
tcp 0 0 0.0.0.0:10011 0.0.0.0:* LISTEN 423/./ts3server
tcp6 0 0 :::10022 :::* LISTEN 423/./ts3server
tcp6 0 0 :::8080 :::* LISTEN 16111/docker-proxy
tcp6 0 0 :::30033 :::* LISTEN 423/./ts3server
tcp6 0 0 :::22 :::* LISTEN 1561/sshd
tcp6 0 0 :::10011 :::* LISTEN 423/./ts3server
Но это не должно быть проблемой, так как:
root@ubuntu:~/docker# sysctl net.ipv6.bindv6only
net.ipv6.bindv6only = 0
root@ubuntu:~/docker# sysctl net.ipv6.conf.all.forwarding
net.ipv6.conf.all.forwarding = 1