簡體   English   中英

如何連接到遠程機器上的 docker mysql 容器

[英]How to connect to docker mysql container on remote machine

我有兩台機器。 我的機器有IP1(Europe) ,其他機器有公共IP2(USA) IP2我有 mysql 容器運行,卷/var/lib/mysql設置為復制到主機上的某個文件夾中~/mysqldatabase 添加了端口3306防火牆規則。 我也有到機器的 ssh 連接。 所以我不確定從哪里開始。 通常當沒有泊塢窗時,我只添加

bind-address = 0.0.0.0

作為 mysql 中的配置,我打開防火牆端口3306 (或另一個指向 mysql 的端口)並且一切正常。 所以可能我可以在 IP2 機器上的 docker 之外安裝 mysql-server 包(主機是 ubuntu16.04)並將其設置為指向~/mysqldatabase文件夾,但真的有必要這樣做嗎? 有沒有辦法直接從IP1連接到IP2:mysql_container:mysql_database

我以兩種方式運行 mysql docker 容器。 一種是使用 docker 文件。 另一個是 systemctl 服務。

docker-compose.yml 的一部分:

version: "3"
services:
  mysql:
    image: mysql:5.7
    volumes:
      - /home/username/mysqldatabase:/var/lib/mysql
    ports:
      - '3306:3306'
    environment:
        MYSQL_ROOT_PASSWORD: rootpass
        MYSQL_DATABASE: somedb
        MYSQL_USER: someuser
        MYSQL_PASSWORD: someuserpassword

mysql.service

[Unit]
Description=Run %p
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -f %p
docker run --rm --name mysql -v /home/username/mysqldatabase:/var/lib/mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=rootpass -e MYSQL_DATABASE=somedb -e MYSQL_USER=someuser -e MYSQL_PASSWORD=someuserpassword \
mysql:5.7
ExecStop=/usr/bin/docker stop %p

[Install]
WantedBy=multi-user.target

為了讓事情更簡單,讓我們說我只使用第二種方法。

我沒有:

  • 1.ip2機器上的mysql-client、mysql-server或mysql
  • 2.我還沒有設置任何地方綁定到 0.0.0.0 因為我想直接連接到 mysql 容器。 可能我必須將它設置為綁定到此容器內的 0.0.0.0。

防火牆的結果

sudo netstat -tunlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      24717/docker-proxy

我認為您的 mysql 容器正在偵聽 ipv6(查看您的 netstat 結果)。 原因可能是您的 docker 配置。 我不知道如何解決它,我個人只是在我的 docker 主機上關閉了 ipv6 以避免這個問題。

希望能幫助到你。

您沒有指定如何運行 mysql 容器...

您需要指定應該“發布”哪個端口,即哪個端口應該從“外部”到您的 mysql 容器的“內部”。

為此,您可以在執行docker-compose.yml docker run時指定-p選項或將其添加到docker-compose.yml

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:tag

docker-compose.yml

version: '3.1'

services:
  db:
    image: mysql
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: example

在此處閱讀有關發布端口的更多信息。

對於那些即使在所有這些提示之后仍未設法連接的人。 考慮使用其他端口

例子:

ports:
      - '3308: 3306'

我這樣解決了我的問題。

您可以修改您的my.cnf並添加bind_address=0.0.0.0

這對我有用。 mysql 配置文檔:bind_address

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM