linux下docker启动mysql容器,开启外部访问

Docker与MySQL安装及容器操作
博客介绍了使用yum安装docker并启动,接着安装mysql,可自动下载镜像也能自行下载。还说明了开启外部访问的方法,即进入镜像内部操作。最后介绍了停止、重启和移出mysql容器的操作,通过容器id来执行相应命令。

安装docker和mysql

安装docker

  yum -y install docker-io

启动docker

  service docker start

安装mysql,没有镜像会自动下载,也可以自己下载想要的镜像:

docker run --name=mysql -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql


--name之后定义名字,MYSQL_ROOT_PASSWORD为自己定义的密码。

查看运行的容器:docker ps

开启外部访问:

根据这个id进入镜像内部:docker exec -it 5e7821a2a06b bash

进入mysql:mysql -uroot -p 

use mysql
update user set password_expired = "Y"where user="root";
ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

exit退出镜像内部 

停止和重启mysql容器:

停止容器:docker stop 5e7821a2a06b    (镜像运行的id号)

重启:

查看所有容器,包括停止的:docker ps -a    

重启:docker restart 5e7821a2a06b   

也可以移出这个容器:docker rm 5e7821a2a06b   

 

 

### 如何配置Docker容器连接外部MySQL数据库 在配置Docker容器以连接到外部MySQL数据库时,需要确保网络设置正确,并且容器能够访问宿主机或远程的MySQL服务。以下是几种常见的方法和配置细节: #### 方法一:通过命令行直接连接 可以使用`docker exec`命令从容器内部执行命令来连接外部MySQL数据库。例如: ```bash docker exec MY_CONTAINER echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3307 [^1] ``` 需要注意的是,这里的`127.0.0.1`应替换为宿主机的实际IP地址或域名。如果容器运行在Linux系统上,可以通过`host.docker.internal`访问宿主机。 #### 方法二:通过`docker-compose.yml`文件配置 在`docker-compose.yml`文件中添加适当的参数以支持外部连接。例如: ```yaml version: '3' services: app: image: my_app_image restart: always environment: MYSQL_HOST: "external_mysql_host" MYSQL_PORT: "3306" MYSQL_USER: "DB_USER" MYSQL_PASSWORD: "DB_USER_PWD" command: ["--default-authentication-plugin=mysql_native_password"] [^2] ``` 此配置中,`MYSQL_HOST`应设置为外部MySQL服务器的IP地址或域名,而`MYSQL_PORT`则指定MySQL服务的端口号。 #### 方法三:通过`--link`选项连接 如果外部MySQL数据库运行在同一台宿主机上,可以使用`--link`选项将容器MySQL服务链接起来。例如: ```bash sudo docker run --name=mysql_client2 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein [^3] ``` 这种方法适用于简单的开发环境,但在生产环境中建议使用更灵活的网络配置。 #### 方法四:解决连接失败问题 当遇到类似`pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")`的错误时[^4],需要检查以下几点: - 确保MySQL服务已启动并监听正确的IP地址和端口。 - 验证防火墙规则是否允许来自Docker容器的连接。 - 如果容器运行在Linux系统上,尝试将`localhost`替换为`host.docker.internal`或宿主机的真实IP地址。 #### 示例代码 以下是一个完整的Python脚本示例,展示如何从Docker容器中连接到外部MySQL数据库: ```python import pymysql try: connection = pymysql.connect( host='external_mysql_host', port=3306, user='DB_USER', password='DB_USER_PWD', database='my_database' ) cursor = connection.cursor() cursor.execute("SHOW DATABASES;") results = cursor.fetchall() print(results) except pymysql.err.OperationalError as e: print(f"Connection failed: {e}") finally: if connection: connection.close() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值