2015-09-02 28 views
29

Tôi có một Docker mysql hình ảnh chạy, sau đây là những gì các tập tin Docker-compose.yml trông giống như:Kết nối với bộ chứa MySQL Docker từ máy chủ cục bộ?

db: 
    image: mysql 
    environment: 
    MYSQL_ROOT_PASSWORD: "" 
    MYSQL_ALLOW_EMPTY_PASSWORD: yes 
    ports: 
    - "3306:3306" 

này hoạt động tốt.

Câu hỏi của tôi là: Làm cách nào để kết nối với cá thể MySQL chạy trên vùng chứa đó từ máy khách mysql dòng lệnh trên máy chủ lưu trữ của tôi (macbook của tôi)?

Để làm rõ:

  • Tôi có một macbook với Docker cài đặt
  • Tôi có một container Docker với mysql
  • Tôi muốn kết nối với các ví dụ mysql chạy trên thùng sơn nói trên từ nhà ga trên macbook của tôi
  • Tôi KHÔNG muốn sử dụng lệnh docker để thực hiện việc này. Thay vào đó, tôi muốn sử dụng máy khách mysql trực tiếp từ Thiết bị đầu cuối (không có đường hầm thông qua hộp chứa đế).

Tôi không có MySQL chạy cục bộ, vì vậy cổng 3306 phải mở và sẵn sàng để sử dụng.

Lệnh Tôi đang sử dụng để bắt đầu container là: docker-compose run

+0

này trông đặc biệt có liên quan: http://serverfault.com/questions/688513/cant-access-mysql-docker-container-from-the-host – Caleb

+0

thế nào được cài đặt Docker trên macbook của bạn? docker toolbox, boot2docker hoặc kitematic? – Thomasleveil

+0

'boot2docker' Hộp công cụ docker không đáng tin cậy. Tôi có vấn đề mở trên github của họ, và nếu/khi nó trở nên ổn định hơn tôi sẽ sử dụng nó, nhưng bây giờ 'boot2docker' đang quản lý các máy ảo, và nó hoạt động tốt. – Caleb

Trả lời

41

Sử dụng docker-compose up

Vì bạn công bố cảng 3306 trên Docker bạn chủ, từ máy chủ mà bản thân bạn sẽ kết nối với 127.0.0.1:3306.

Sử dụng docker-compose run

Trong trường hợp đó phần lập bản đồ cảng của tập tin docker-compose.yml được bỏ qua. Để có phần lập bản đồ cổng coi, bạn phải thêm --service-ports tùy chọn:

docker-compose run --service-ports db 

lưu ý bổ sung

Ghi chú rằng theo mặc định, khách hàng mysql cố gắng kết nối sử dụng một ổ cắm unix khi bạn nói với nó để kết nối đến localhost. Vì vậy, sử dụng 127.0.0.1 và không localhost:

$ mysql -h 127.0.0.1 -P 3306 -u root 

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

$ mysql -h localhost -P 3306 -u root 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

+0

cảm ơn mẹo. Tôi đã thử sử dụng '127.0.0.1' (và' 192.168.59.103'), không hoạt động: ( – Caleb

+0

Bất kỳ ý tưởng nào khác? @Thomasleveil – Caleb

+0

xin lỗi tôi không bao giờ sử dụng boot2docker bản thân mình. Có lẽ https://github.com/docker/docker/issues/4007 sẽ giúp – Thomasleveil

-1

Kết nối với MySQL qua {chủ ip}: 3306 kể từ khi bạn tiếp xúc với các cổng nội bộ để máy chủ của bạn như 3306. Nếu bạn cần truy cập vào Các công cụ MySQL CLI bạn sẽ cần phải đi docker exec -it mycontainer bash điều này sẽ đặt bạn bên trong vùng chứa để truy cập các công cụ được cài đặt với MySQL nếu bạn không cài đặt chúng cục bộ trên máy chủ lưu trữ o/s.

8

tôi đã nhận nó !! Câu trả lời là sử dụng tùy chọn --service-ports khi chạy docker-compose:

docker-compose run --service-ports db (bản gốc đế chế bản gốc).tệp yml hoạt động tốt)

Cảm ơn tất cả vì sự trợ giúp!

0

Tệp yml của bạn có vẻ tốt.

Bạn có thể kết nối trực tiếp chứa Docker trực tiếp vì nó đã lập bản đồ với cổng địa phương 3306. Chỉ cần goto terminal và chạy

mysql -h 127.0.0.1 -u root -p 

Lưu ý: bạn phải có quyền truy cập vào dòng lệnh mysql. Nếu lệnh mysql hiển thị lỗi, hãy kiểm tra '/ usr/local/mysql/bin' khác khôn ngoan bạn không thể kết nối với máy chủ mysql. Nói cách khác, bạn phải có mysql client trên máy tính của bạn.

0

Nếu máy chủ Docker MySQL của bạn đang chạy một cách chính xác, bạn có thể kết nối đến nó từ máy tính cục bộ, nhưng bạn nên xác định máy chủ, cổng và giao thức như thế này:

mysql -h localhost -P 3306 --protocol=tcp -u root 

Bởi vì bạn đang chạy MySQL bên Docker container, ổ cắm không có sẵn và bạn cần kết nối thông qua TCP. Thiết lập "--protocol" trong lệnh mysql sẽ thay đổi điều đó.

0

làm việc này cho tôi.

/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p 
+0

Bạn có thể giải thích chi tiết hơn về cách thức hoạt động chính xác và nó được sử dụng ở đâu? –

+0

thats vị trí nơi mysql được cài đặt. do đó, lệnh "/ usr/local/mysql/bin/mysql" sẽ chạy tệp thực thi mysql. chỉ mysql trên wont riêng của mình làm việc trong một số trường hợp vì nó phụ thuộc vào cách bạn cài đặt mysql trên mac của bạn – Swannie

+0

Tôi đã sử dụng nó trên một container mysql 5.7 chạy qua docker-compose và sử dụng nó với một docker swarm bằng cách sử dụng docker-machine – Swannie

Các vấn đề liên quan