访问没有docker-compose的Docker(MySQL)容器?

时间:2018-03-10 15:48:34

标签: mysql macos docker docker-compose docker-for-mac

我是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?

现在它在端口3306上的localhost上运行(根据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。

2 个答案:

答案 0 :(得分:0)

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

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端口。如果要使用localhost上的其他端口(例如3307)访问mysql,可以执行-p 3307:3306

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

答案 1 :(得分:0)

我建议你在所有的docker-compose服务中总是使用干净的mysql db。您的服务将更加独立,并且可以在一个docker-compose.yml

中轻松管理访问

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

创建volume来存储数据,你永远不应该在长期

中写入容器文件系统
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,则可以使用docker.for.mac.host.internal 中的{{1}}获取主机(您的Mac)的IP