标签 docker 下的文章

今天先参照 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 的 ubuntu 安装 docker的步骤:

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

如果选择官方的源:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88

如果选择阿里的源:

sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
sudo apt-key fingerprint 0EBFCD88

添加官方仓库:

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

添加阿里仓库:

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
apt-cache madison docker-ce

从上面输出的版本中找到你需要的版本:

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

如果这里报错,可以尝试这个命令,我用这个命令进行安装就没有问题:

sudo apt-get -y install docker-ce=[VERSION]
sudo docker run hello-world
sudo gpasswd -a 用户名 docker
sudo service docker restart
newgrp - docker

安装 docker-compose,先去 https://github.com/docker/compose/releases 找到你需要的版本,然后替换下面的 1.24.1 这个版本号,我用的是 1.27.3 :

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

参考: https://docs.docker.com/engine/install/ubuntu/ https://www.cnblogs.com/walker-lin/p/11214127.html https://www.runoob.com/docker/docker-compose.html https://blog.csdn.net/liqi_q/article/details/83030737 https://www.cnblogs.com/grow1016/p/11533645.html