Bir Docker konteynerinin içinde çalışan MySQL ile ilgili bir sorun yaşıyorum. Test resmim aşağıdaki Docker dosyasının oluşturduğu içerik:
# See: https://index.docker.io/u/brice/mysql/
FROM ubuntu:12.10
MAINTAINER Joni Kahara <joni.kahara@async.fi>
# Because docker replaces /sbin/init: https://github.com/dotcloud/docker/issues/1024
RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -s /bin/true /sbin/initctl
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get -y install mysql-server
RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
RUN /usr/bin/mysqld_safe & \
sleep 10s && \
mysql -e "GRANT ALL ON *.* to 'root'@'%'; FLUSH PRIVILEGES;"
EXPOSE 3306
VOLUME ["/var/lib/mysql", "/var/log/mysql"]
CMD ["mysqld_safe"]
Yukarıdaki dosyadan bir resim oluşturduktan sonra, şunu çalıştırıyorum:
docker run -p 3306:3306 asyncfi/magento-mysql
Bundan sonra her şey şişer ve yerel makineden MySQL'in bu örneğine giriş yapabilirim. Ancak, başka herhangi bir makineden de giriş yapabilirim.
Güvenlik duvarımı belirli bağlantı noktalarına ("gizli" SSH, HTTP, HTTPS) gelen trafik dışındaki her şeyi filtrelemek üzere ayarladım ve bu filtreleme aslında işe yarıyor; Örneğin, 1234 numaralı bağlantı noktasında bir Django geliştirme sunucusu çalıştırdığımda yerel makineden bağlanabiliyorum, ancak dışarıdan bağlanamıyorum. Bu nedenle, güvenlik duvarı, paketleri "düz" bir işlem olarak çalışan bir sunucuya yönlendirildiğinde, ancak sunucu bir kap içinde çalışırken değil, paketleri filtreliyor gibi görünüyor.
iptables -L -v --line-numbers şöyle diyor:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 2265 107K ACCEPT all -- lo any anywhere anywhere
2 240K 319M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
3 14 1040 ACCEPT tcp -- any any anywhere anywhere tcp dpt:<REDACTED>
4 21 1092 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http
5 6 360 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https
6 538 34656 LOG all -- any any anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables DROP: "
7 551 35424 DROP all -- any any anywhere anywhere
Chain FORWARD (policy ACCEPT 5 packets, 296 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- docker0 docker0 anywhere anywhere
2 6752 396K ACCEPT all -- docker0 !docker0 anywhere anywhere
3 125K 188M ACCEPT all -- any docker0 anywhere anywhere ctstate RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 51148 packets, 14M bytes)
num pkts bytes target prot opt in out source destination
Docker sürümü:
Client version: 0.7.3
Go version (client): go1.2
Git commit (client): 8502ad4
Server version: 0.7.3
Git commit (server): 8502ad4
Go version (server): go1.2
Last stable version: 0.7.3
MySQL portu neden dış dünyaya maruz kalıyor?