我是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。
答案 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