2015-11-20 24 views

Odpowiedz

9

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ład nkratzke/EasyMySQL/start-database.sh, który jest nazywany przez Dockerfile 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" 
    
+0

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 –

+0

@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

+0

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. –

0

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.

+1

W którym polu się tutaj znajdujesz? – VonC

+0

@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. –

2

Musisz wykonać kilka konfiguracji w swoim pojemniku dokowanym. Wykonaj następujące kroki.

  1. 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 
    
  2. 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.

  3. W swoim MySQL Workbench podaj szczegóły połączenia. Użyj MYSQL_PASSWORD, jak określono w pliku docker-compose.yml.

    enter image description here

Teraz powinno być w stanie połączyć się z pojemnika mysql.