(Có lẽ đây là một câu hỏi ngớ ngẩn do kiến thức hạn chế của tôi về quản trị Docker hoặc mysql, nhưng vì tôi đã dành cả buổi tối cho vấn đề này, tôi dám hỏi nó.)
Tóm lại
Tôi muốn chạy mysql trong một bộ chứa docker và kết nối với nó từ máy chủ của tôi. Cho đến nay, điều tốt nhất tôi đã đạt được là:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Thêm chi tiết
Tôi đang sử dụng như sau Dockerfile
:
FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server
# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
&& mv temp.txt /etc/mysql/my.cnf
# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306
CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log
Trong thư mục chứa tệp này, tôi có thể tạo thành công hình ảnh và chạy nó bằng:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Khi tôi đính kèm vào hình ảnh, nó có vẻ hoạt động tốt:
# from the host
> docker exec -it <my_image_name> bash
#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[...]
Tuy nhiên, tôi không có được nhiều thành công từ người dẫn chương trình:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Chi tiết hơn nữa
- Tôi đã thấy rằng có một câu hỏi giống như của tôi . Tuy nhiên, nó không giống nhau (và nó không có bất kỳ câu trả lời nào)
- Tôi đã thấy rằng có những hình ảnh dành riêng cho mysql , nhưng tôi đã không thành công hơn với chúng
- My
grep -v
có thể cảm thấy kỳ lạ. Phải thừa nhận rằng có thể có cách tốt hơn để làm điều đó. Nhưng khi tôi đính kèm hình ảnh của mình, tôi có thể thấy nó thực sự hoạt động như mong đợi (tức là: đã loại bỏbind-address
). Và tôi có thể thấy trong vùng chứa/var/log/mysql/error.log
:
Tên máy chủ (địa chỉ ràng buộc): '0.0.0.0'; port: 3306 - '0.0.0.0' giải quyết thành '0.0.0.0'; Ổ cắm máy chủ được tạo trên IP: '0.0.0.0'.