(Prawdopodobnie jest to głupie pytanie ze względu na moją ograniczoną wiedzę z administracją Docker lub mysql, ale ponieważ spędziłem cały wieczór nad tym problemem, odważę się je zadać.)
W skrócie
Chcę uruchomić mysql w kontenerze docker i połączyć się z nim z mojego hosta. Jak dotąd najlepsze, co osiągnąłem, to:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Więcej szczegółów
Używam następujących 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
W katalogu, w którym znajduje się ten plik, mogę pomyślnie zbudować obraz i uruchomić go za pomocą:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Kiedy dołączam do obrazu, wydaje się, że działa dobrze:
# 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.
[...]
Jednak nie mam takiego sukcesu od gospodarza:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Jeszcze więcej szczegółów
- Widziałem, że jest pytanie, które wygląda jak moje . Jednak to nie jest to samo (i tak nie ma żadnych odpowiedzi)
- Widziałem, że są obrazy poświęcone mysql , ale nie odniosłem z nimi większego sukcesu
- Mogę
grep -v
czuć się dziwnie. Trzeba przyznać, że można to zrobić czystszym sposobem. Ale kiedy dołączam mój obraz, widzę, że faktycznie działał zgodnie z oczekiwaniami (tj: usunąłbind-address
). I widzę w kontenerze/var/log/mysql/error.log
:
Nazwa hosta serwera (adres-wiązania): „0.0.0.0”; port: 3306 - „0.0.0.0” jest zastępowane jako „0.0.0.0”; Gniazdo serwera utworzone na IP: „0.0.0.0”.