当我尝试通过在Ubuntu 16.04中运行由先前团队编写的脚本来构建我的项目之一时

sudo ./build


我收到错误消息:

Step 8/24 : RUN     service mysql start
 ---> Running in 3djjk653642d
 * Starting MySQL database server mysqld
 ...fail!
The command '/bin/sh -c service mysql start' returned a non-zero code: 1


我的Dockerfile看起来像:

COPY        schema.sql /tmp/schema.sql
### User with ALL accesses (winter/toor)
RUN     service mysql start
RUN     mysql < /tmp/schema.sql
RUN     mysql -e "CREATE USER 'winter'@'%' IDENTIFIED BY 'toor'"
RUN     service mysql start && mysql -e "GRANT ALL ON its.* TO 'winter'@'%'"


请帮忙吗?

最佳答案

Dockerfile中的RUN语句用于运行将对文件系统产生一定影响的命令,然后将其保存在另一层中。

启动这样的服务是不正常的,因为内存(服务正在运行的地方)的状态没有存储在映像中,它只能在正在运行的容器中运行。

进行此类操作的通常方法是编写一个bash脚本(称为start.sh或类似名称),将其复制到映像中,然后从末尾的ENTRYPOINT / CMD行中运行Dockerfile。在docker run ...命令中创建容器时将运行该命令

start.sh:

service mysql start
mysql < /tmp/schema.sql
mysql -e "CREATE USER 'winter'@'%' IDENTIFIED BY 'toor'"
service mysql start && mysql -e "GRANT ALL ON its.* TO 'winter'@'%'"


Dockerfile:

COPY        schema.sql /tmp/schema.sql
COPY        start.sh /
ENTRYPOINT  ["/start.sh"]


阅读here以获得有关ENTRYPOINTCMD之间的区别以及何时使用它们的一些信息。

更好的是-使用Docker hub中的官方MySQL映像。通过使用环境变量,您可能可以实现所需的全部功能。

关于mysql - 错误:命令'/bin/sh返回了非零代码:1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50630722/

10-16 22:38