(อาจเป็นคำถามที่โง่เนื่องจากความรู้ที่ จำกัด ของฉันเกี่ยวกับ Docker หรือการดูแลระบบ mysql แต่เนื่องจากฉันใช้เวลาทั้งเย็นกับปัญหานี้ฉันจึงกล้าที่จะถามมัน)
โดยสังเขป
ฉันต้องการเรียกใช้ mysql ในคอนเทนเนอร์นักเทียบท่าและเชื่อมต่อจากโฮสต์ของฉัน จนถึงตอนนี้สิ่งที่ดีที่สุดที่ฉันทำได้คือ:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
รายละเอียดเพิ่มเติม
ฉันใช้สิ่งต่อไปนี้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
ในไดเร็กทอรีที่มีไฟล์นี้ฉันสามารถสร้างอิมเมจได้สำเร็จและเรียกใช้ด้วย:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
เมื่อฉันแนบภาพดูเหมือนว่าจะใช้งานได้ดี:
# 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.
[...]
อย่างไรก็ตามฉันไม่ประสบความสำเร็จมากนักจากโฮสต์:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
รายละเอียดเพิ่มเติม
- ผมเคยเห็นว่ามีคำถามที่มีลักษณะเช่นเหมือง อย่างไรก็ตามมันไม่เหมือนกัน (และไม่มีคำตอบใด ๆ อยู่ดี)
- ฉันเห็นว่ามีภาพที่ใช้สำหรับ mysqlแต่ฉันไม่ประสบความสำเร็จมากกว่านี้
- ฉัน
grep -v
อาจจะรู้สึกแปลก ๆ เป็นที่ยอมรับว่าอาจมีวิธีที่สะอาดกว่านี้ แต่เมื่อฉันแนบรูปภาพของฉันฉันสามารถสังเกตได้ว่ามันใช้งานได้จริงตามที่คาดไว้ (เช่น: ลบออกbind-address
) และฉันเห็นในคอนเทนเนอร์/var/log/mysql/error.log
:
ชื่อโฮสต์ของเซิร์ฟเวอร์ (ที่อยู่ผูก): '0.0.0.0'; พอร์ต: 3306 - '0.0.0.0' เปลี่ยนเป็น '0.0.0.0'; ซ็อกเก็ตเซิร์ฟเวอร์ที่สร้างบน IP: '0.0.0.0'