如何连接到远程机器上的docker mysql容器

rhfm7lfc  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(407)

我有两台机器。我的机器 IP1(Europe) ,以及其他具有公共 IP2(USA) . 在 IP2 我有一个mysql容器正在运行 /var/lib/mysql 设置为在主机上的某个文件夹中复制 ~/mysqldatabase . 端口的防火墙规则 3306 已添加。我也有ssh连接到机器。所以我不知道从哪里开始。通常在没有 Docker 的情况下,我只添加

bind-address = 0.0.0.0

作为mysql中的配置,我打开了防火墙端口 3306 (或者指向mysql的另一个)这些东西就可以工作了。所以我可能可以在ip2机器上的docker外部安装mysql server包(主机是ubuntu16.04),并将其设置为指向 ~/mysqldatabase 文件夹,但真的有必要这么做吗?有没有办法直接从 IP1IP2: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.mysql-client、mysql server或ip2机器上的mysql
2.我没有设置绑定到0.0.0.0的位置,因为我想直接连接到mysql容器。可能我必须将它设置为绑定到这个容器中的0.0.0.0。
防火墙的结果

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

8dtrkrch1#

您没有指定如何运行mysql容器。。。
您需要指定哪个端口应该“published”,即哪个端口应该从mysql容器的“outside”到“inside”。
为此,您可以指定 -p 当你这么做的时候 docker run 或将其添加到 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

请在此处阅读有关发布端口的详细信息。
dldeef67

dldeef672#

我认为您的mysql容器正在侦听ipv6(查看netstat结果)。原因可能是你的docker配置。我不知道如何解决它,我个人只是关闭我的docker主机上的ipv6以避免这个问题。
希望有帮助。

相关问题