我创建了docker-compose.yml文件,该文件创建MySQL镜像,并将MySQL根用户的密码设置为"hello“。
# docker-compose.yml
version: '3.1'
services:
mysql:
image: mysql:5.6.40
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
- MYSQL_ROOT_PASSWORD=hello
- MYSQL_ALLOW_EMPTY_PASSWORD=hello
- MYSQL_RANDOM_ROOT_PASSWORD=hello
然后我运行:
sudo docker-compose up # (1)
..。从包含此文件的目录中。
第一个问题是,新创建的容器开始在前台运行,而不是在bash中运行,我无法在不退出它的情况下将其放到后台,这可以通过Ctrl+C来完成,或者以某种方式进入bash,从这个过程中退出。
但是当我打开一个新的终端窗口并运行:
sudo docker exec -it bdebee1b8090 /bin/bash # (2)
...,其中bdebee1b8090是正在运行的容器的id,我输入bash,在这里我可以以根用户的身份进入hello shell,输入密码“MySQL”:
mysql -u root -p # (3)
然后,我退出容器中的bash和MySQL shell,而不停止容器。
然后我提交对容器的更改:
sudo docker commit bdebee1b8090 hello_mysql # (4)
...创建一个图像。然后,当我运行镜像时:
sudo docker run -it --rm hello_mysql /bin/bash # (5)
..。并尝试以根用户身份再次启动MySQL shell,输入密码"hello",我得到如下错误
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
甚至在我重启MySQL服务器之后:
/etc/init.d/mysql restart # (6)
...,我得到了同样的错误。
以上所有命令都是在ubuntu上运行的。
为什么会发生这种情况?
编辑:
当我试图在hello High Sierra上执行这些步骤时,我卡在了步骤(3)上,因为当我试图输入密码“MacOS”时,它不被接受。此错误显示在屏幕上:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
当我尝试在容器中重新启动MySQL服务器时
/etc/init.d/mysql restart
...,容器将在后台重新启动。
...但是当我再次运行它并尝试重复步骤(2)和(3)时,它给出了相同的错误,并且当我再次重启MySQL服务器时,容器再次在后台重启...
Edit2:
在我删除行之后:
- MYSQL_ALLOW_EMPTY_PASSWORD=hello
- MYSQL_RANDOM_ROOT_PASSWORD=hello -
...it开始在Mac上工作,但在我提交容器并尝试进入MySQL外壳之后,它给出了错误,如下所示:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
……再来一次。
发布于 2018-07-25 23:56:24
Docker镜像通常设计为在前台运行单个进程或服务器,直到它们退出。标准的mysql
镜像是这样工作的:如果不使用-d
执行docker run mysql
,您将看到所有服务器日志都被打印到标准输出,并且没有立即获得外壳的选项。您应该将容器中的交互式shell看作是一种调试便利,而不是Docker容器通常运行的方式。
当您连接时,它运行的是交互式shell而不是数据库服务器,这就是为什么会出现“can‘t docker run --rm -it /bin/bash
to server”错误的原因。一般来说,你应该假设像init.d脚本这样的东西不能在Docker中工作;这取决于它们可能的特定设置,但同样,它们不是Docker容器通常运行的方式。
您可以在主机上或其他地方安装mysql
客户端二进制文件,并使用它与运行在容器中的服务器进行交互。您不需要在容器中使用交互式shell来完成这里所描述的任何操作。
发布于 2020-05-08 17:08:08
这里有点晚了:我也遇到了这个问题。我拿了一个ubuntu镜像并运行apt-get install mysql-server,它在当前实例中运行良好,但在提交到镜像后,它不起作用,我也无法启动服务。
所以在ubuntu中,我将其设置为apt-get install mariadb-server.在将其提交到新容器的镜像中之后,我运行了服务mysql start;mysql运行得很好!
https://stackoverflow.com/questions/51519943
复制相似问题