2015-01-20 30 views
56

Nếu tôi có một cơ sở dữ liệu mysql chạy trên một số máy chủ, và chủ nhà cũng đang chạy một container Docker: Làm thế nào tôi có thể truy cập vào cơ sở dữ liệu mysql từ bên trong container Docker đang chạy trên máy chủ ?Truy cập từ một container Docker

Ví dụ, có một cách để xuất bản một cổng host để container (nghịch đảo của những gì Docker chạy -p không)?

+0

Nếu máy chủ MySQL đang lắng nghe trên một cổng, không thể container chỉ cần kết nối đến máy chủ trên cổng đó giống như bất kỳ kết nối internet nào khác? – jwodder

Trả lời

55

Có một số cuộc thảo luận từ lâu về làm thế nào để thực hiện điều này một cách nhất quán, được hiểu rõ và cầm tay. Không có độ phân giải đầy đủ nhưng tôi sẽ liên kết bạn với các cuộc thảo luận bên dưới.

Trong mọi trường hợp bạn nhiều người muốn thử sử dụng tùy chọn --add-host để Docker chạy để thêm địa chỉ IP của máy chủ vào/etc/file host của container. Từ đó nó tầm thường để kết nối với máy chủ trên bất kỳ cổng yêu cầu:

Thêm các mục vào một host chứa tập tin

Bạn có thể thêm máy chủ khác vào tập tin/etc/hosts của thùng chứa bằng cách sử dụng một hoặc nhiều cờ --thêm máy chủ. Ví dụ này cho biết thêm một địa chỉ tĩnh cho một máy chủ tên Docker:

$ docker run --add-host=docker:10.180.0.1 --rm -it debian 
    $$ ping docker 
    PING docker (10.180.0.1): 48 data bytes 
    56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms 
    56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms 
    ^C--- docker ping statistics --- 
    2 packets transmitted, 2 packets received, 0% packet loss 
    round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms 

Lưu ý: Đôi khi bạn cần phải kết nối với máy chủ Docker, có nghĩa là nhận được địa chỉ IP của máy chủ. Bạn có thể dùng vỏ sau lệnh để đơn giản hóa quá trình này:

$ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'" 
$ docker run --add-host=docker:$(hostip) --rm -it debian 

Tài liệu:

https://docs.docker.com/engine/reference/commandline/run/

thảo luận về việc truy cập máy chủ từ container:

https://github.com/docker/docker/issues/1143

https://github.com/docker/docker/issues/10023

+3

Tôi phải xóa dấu gạch chéo ngược cuối cùng khỏi bí danh hostip của bạn. – Private

12

Từ Docker 17.06 trở đi, tên DNS chỉ dành riêng cho máy Mac có sẵn trong vùng chứa docker để giải quyết địa chỉ IP của máy chủ lưu trữ. Đó là:

docker.for.mac.localhost

Các tài liệu là ở đây: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support

+1

'docker.for.mac.host.internal' từ' Docker 17.12.0 ce' trở đi. https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-17120-ce-mac46-2018-01-09-stable – Zangetsu

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