0

我是 Docker 新手,可能会让事情变得混乱,但假设我有多个项目,并且我想对它们使用相同的 docker MySQL 数据库。

其中一些项目也运行 Docker,有些不运行,运行 Docker 的项目在 repos 中有 docker-compose.yml,所以我无法更改此文件,对于其他项目,我根本不想使用 Docker(基本容器除外) .

我已经拉了https://hub.docker.com/_/mysql/然后像这样运行它:

docker run --name mysql-experiment -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.21

当我运行时,docker ps我可以看到mysql-experiment正在运行。

我可以使用docker exec -it mysql-experiment bash. 但是我对 MySQL 还不够好,无法通过终端对其进行管理。

我的问题是 - 我如何设置这个容器以便它拥有自己的端口和 IP,并且我可以在本地网络中的任何地方使用它,而无需 docker-compose?

现在它在端口上的 localhost 上运行3306(根据docker ps),但是当我尝试在 Sequel Pro 中访问 127.0.0.1:3306 时,我得到:

Unable to connect to host 127.0.0.1, or the request timed out.

另外,我不确定我应该在这个容器中使用什么用户名(我试过 admin/root/empty)

[编辑]

我知道有很多这样的问题,但都涉及到 docker-compose。

4

2 回答 2

0

我建议您始终在所有 docker-compose 服务中使用干净的 mysql db。您的服务将更加独立,并且可以在一个 docker-compose.yml 中轻松管理访问

但是如果你只想使用一个 mysql 我会推荐

创建来存储数据,你不应该长期写入容器文件系统

docker volume create my_mysql_data

运行mysql并将端口映射到主机-p

docker run -d -p 3306:3306 --restart always \ # port and restart policy
-v my_mysql_data:/var/lib/mysql \ # use the volume created before
--name mysql-experiment -e MYSQL_ROOT_PASSWORD=root \
mysql:5.7.21

使用主机 IP 从其他 docker 容器访问 mysql 或使用此--link选项允许此“my_web 访问地址上的 mysql 容器mysql

docker run -d --name my_web \
--link mysql-experiment:mysql \
debian

如果您在 mac 和 docker-compose contianer 中,您可以获得主机(您的 mac)的 IP,docker.for.mac.host.internal就像在这个答案中一样

于 2018-03-10T17:11:18.440 回答
0

目前,mysql 进程3306在容器本身的端口上运行。您可以通过使用 SSH 进入容器来验证该进程是否正在运行docker exec,就像您所做的一样,然后执行以下操作:

mysql -u root -p root -h localhost

这里的localhost属于mysql容器。为了通过您的本地环境(我假设在这种情况下是 docker 主机)访问您的 mysql 进程,您需要发布端口。这可以使用以下-p标志来完成docker run

docker run --name mysql-experiment -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.21

在这里,我们将主机的 3306 端口绑定到容器的 3306 端口。如果你想使用本地主机上的不同端口访问 mysql,比如 3307,你可以使用-p 3307:3306.

参考:https ://docs.docker.com/engine/reference/run/#expose-incoming-ports

于 2018-03-10T16:52:50.563 回答