Tôi đang gặp vấn đề với MySQL chạy bên trong Docker container. Hình ảnh thử nghiệm của tôi được xây dựng từ Dockerfile sau:
# 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"]
Sau khi xây dựng một hình ảnh từ tập tin trên, tôi chạy nó với:
docker run -p 3306:3306 asyncfi/magento-mysql
Sau đó mọi thứ đều phình ra và tôi có thể đăng nhập vào phiên bản MySQL này từ máy cục bộ. Tuy nhiên, tôi cũng có thể đăng nhập từ bất kỳ máy nào khác.
Tôi đã thiết lập tường lửa của mình để lọc mọi thứ trừ lưu lượng truy cập đến các cổng cụ thể ("ẩn" SSH, HTTP, HTTPS) và tính năng lọc này thực tế có vẻ hoạt động; ví dụ nếu tôi chạy một máy chủ phát triển Django trên cổng 1234 thì tôi có thể kết nối từ máy cục bộ, nhưng không phải từ bên ngoài. Vì vậy, tường lửa dường như đang lọc các gói khi chúng được chuyển đến một máy chủ đang chạy như một quy trình "đơn giản", nhưng không phải khi máy chủ đang chạy bên trong một container.
iptables -L -v - số dòng cho biết như sau:
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
Phiên bản Docker là:
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
Tại sao cổng MySQL tiếp xúc với thế giới bên ngoài?