Używam serwera mysql wewnątrz kontenera docker i mogę uzyskać dostęp do wewnątrz okna dokowanego. Jak utworzyć połączenie w mysql workbench działającym na moim lokalnym (Host Machine).Jak podłączyć mysql Workbench do uruchamiania mysql wewnątrz docker?
Odpowiedz
2 warunki związane dokowane-:
pierwsze, Twój doker run należy zmapować portu mysql do portu hosta:
docker run -p host:container
(na przykład: docker run -d -p 3306:3306 tutum/mysql
)
sekunda, jeśli jesteś usi ng docker w VM (docker-machine, z boot2docker), musisz użyć ip z
docker-machine ip <VMname>
, z portem mapowanym przez hosta.http://$(docker-machine ip <VMname>):hostPort
Jeśli trzeba użyć localhost
, trzeba by zrobić some port forwarding at the VirtualBox level:
VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"
(controlvm
jeśli VM pracuje, modifyvm
jest VM jest zatrzymany) (zastąpić " boot2docker-vm
"nazwą Twojego vm: patrz docker-machine ls
)
2 warunki związane MySQL:
Jak pokazano na
nkratzke/EasyMySQL/Dockerfile
, musisz włączyć zdalny dostęp:# Enable remote access (default is localhost only, we change this # otherwise our database would not be reachable from outside the container) RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
Musisz utworzyć użytkowników podczas startig swoją bazę w Döcker obrazu.
Patrz na przykładnkratzke/EasyMySQL/start-database.sh
, który jest nazywany przezDockerfile CMD
:/usr/sbin/mysqld & sleep 5 echo "Creating user" echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8 echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8 echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8 echo "finished"
mam rozwiązanie tego problemu poprzez ustawienie wartości pola w Nazwa hosta: 127.0.0.1 (localhost), port domyślnie 3306 z twoimi zaufaniami.
W którym polu się tutaj znajdujesz? – VonC
@VonC Tutaj mam na myśli pola workbench, takie jak * nazwa hosta *, * port *, * nazwa użytkownika * i * hasło * wymagane do połączenia mysql serwer. –
Musisz wykonać kilka konfiguracji w swoim pojemniku dokowanym. Wykonaj następujące kroki.
Podaj blok konfiguracji mysql w twoim docker-compose.yml. Mam następujący blok mysql pod usługi obiekt w moim pliku docker-compose.yml.
services: db: image: mysql volumes: - "./.data/db:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: mydb MYSQL_USER: user MYSQL_PASSWORD: pass ports: 42333:3306
Restart pojemnik doker i uruchomić następujące polecenia, aby dostać się do powłoki bash w pojemniku mysql
docker ps docker exec -it <mysql container name> /bin/bash
Wewnątrz pojemnika, aby połączyć się z mysql typu linii poleceń,
mysql -u root -p
Użyj MYSQL_ROOT_PASSWORD zgodnie z określeniem w docker-compose.yml. Wykonaj następujące polecenia, aby utworzyć nowego użytkownika.
create user 'user'@'%' identified by 'pass'; grant all privileges on *.* to 'user'@'%' with grant option; flush privileges;
Znak procentu (%) oznacza wszystkie adresy IP. Zrestartuj kontener dokera.
W swoim MySQL Workbench podaj szczegóły połączenia. Użyj MYSQL_PASSWORD, jak określono w pliku docker-compose.yml.
Teraz powinno być w stanie połączyć się z pojemnika mysql.
Docker działa na mojej lokalnej maszynie. i ma adres IP 172.17.42.1. Kiedy uruchamiam $ select user(); Daje + ---------------- + | użytkownik() | + ---------------- + | root @ localhost | + ---------------- + 1 wiersz w zestawie (0,00 s) i zmienna show daje port | 3306 –
@PawanSharma czy jesteś na Linuksie? Jeśli tak, jaka była dokładna komenda 'docker run', której używasz do uruchamiania kontenerowego mysql? Którą wersję okna dokowanego używasz? – VonC
Tak, jestem na Ubuntu mchine, a wersja dokujaca to Docker w wersji 1.8.2, kompilacja 0a8c2e3. Mogę uzyskać dostęp do mysql wewnątrz kontenera dokera. –