今天先参照 https://www.jianshu.com/p/ddf7c0153644 这个里面的说明写了相应的配置文件,结果一启动容器就报错了。

Creating docker-test_mysql_1 ... 
Creating docker-test_mysql_1 ... error

ERROR: for docker-test_mysql_1  Cannot start service mysql: driver failed programming external connectivity on endpoint docker-test_mysql_1 (22e74af6dece7dd4cae19aa8809099c6fde961e19f6b43178bb34a595e1c5a02): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use

ERROR: for mysql  Cannot start service mysql: driver failed programming external connectivity on endpoint docker-test_mysql_1 (22e74af6dece7dd4cae19aa8809099c6fde961e19f6b43178bb34a595e1c5a02): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.

参考 https://www.cnblogs.com/loovelj/p/7823093.html 这个里面的做法,首先查看是否本机的 mysql 占用了端口。

netstat -tunlp | grep 3306

确定是本机的 mysql,就停止服务。

service mysql stop

然后通过 ps -ef|grep mysqld 可以发现 mysql 已经停止了。然后重新使用 docker-compose up -d 启动容器,这下就不报错了。

使用 docker ps 来查看容易的状态属性,id 和 names 这两个值都可以用来指定容器。

docker exec -it docker-test_mysql_1 bash
docker exec -it f24473a1626a bash

上面这两条命令分别用 name 和 id 来指定容器执行 bash 命令,效果是一样的。这样就进入了容器的命令行。

停止 docker

docker-compose stop

删除 docker

docker rm docker-test_mysql_1

docker 中使用 mysql 的时候,init 文件夹下面的 sql, sh, sql.gz 这些文件会被遍历,然后执行,但是执行顺序没有办法保证,所以想要按照一定顺序执行,只能通过 sh 脚本来编写处理过程, 具体参考:https://blog.csdn.net/boling_cavalry/article/details/71055159

在 init 脚本中 mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF 注意 -p 后面不要有空格,否则可能不能以 root 登录 mysql; 不要忘了给 init 脚本所有人可执行权限,因为只有 db 对应的文件夹是 mysql的,其他的文件夹都是 1000:1000,可能导致执行权限问题。

在 init 脚本中,mysql 命令里面创建用户的时候,密码必须有单引号,因为用了单引号,变量外面就必须有大括号,才能保证正确。

create user '${MYSQL_USER}'@'localhost' IDENTIFIED BY '${MYSQL_PASS}';

在mysql 中使用 root 登录的时候,通过命令 select * from mysql.user 来查看有哪些用户。

GRANT ALL PRIVILEGES ON  数据库名.表名 TO '$user1'@'%' IDENTIFIED BY '$password1' REQUIRE X509;
GRANT  SELECT,INSERT,ALTER,UPDATE,DELETE ON iot_ny.* TO  'Iothui'@'localhost';

可以用这些命令给用户赋权。

搜索可以用哪些镜像,可以去 https://hub.docker.com/ 上搜索。

参考: https://blog.csdn.net/weixin_33670713/article/details/93029183 https://stackoverflow.com/questions/33470753/create-mysql-database-and-user-in-bash-script https://blog.csdn.net/wangmx1993328/article/details/81805371 https://blog.csdn.net/boling_cavalry/article/details/71120725 https://stackoverflow.com/questions/20033648/how-to-run-mysql-command-on-bash https://superuser.com/questions/288621/create-mysql-database-with-one-line-in-bash https://www.cnblogs.com/fuhai0815/p/9548213.html https://blog.csdn.net/m0_38143867/article/details/94046889 https://github.com/zq2599/docker_disconf/blob/master/docker-compose.yml https://www.cnblogs.com/whych/p/9446032.html https://blog.csdn.net/u011913691/article/details/90665639 https://github.com/SingletonPattern/compose-demo/blob/master/compose-demo/docker-compose.yml https://www.cnblogs.com/ray-mmss/p/12249204.html https://blog.csdn.net/weixin_41043145/article/details/92834784 https://www.cnblogs.com/badaoliumangqizhi/archive/2019/09/16/11530695.html https://www.jianshu.com/p/658911a8cff3 https://www.jianshu.com/p/ddf7c0153644

标签: docker

添加新评论