错误:命令' / bin / sh返回非零代码:1

时间:2018-05-31 18:36:30

标签: mysql docker

当我尝试通过在我的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'@'%'"

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

Dockerfile中的

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

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

执行此类操作的常规方法是编写bash脚本(称为start.sh或类似的东西),将其复制到图像中,然后从ENTRYPOINT / {{运行1}}在Dockerfile末尾的行。当在CMD命令

中创建容器时,将运行此命令

<强> start.sh:

docker run ...

<强> Dockerfile:

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'@'%'"

请阅读here,了解COPY schema.sql /tmp/schema.sql COPY start.sh / ENTRYPOINT ["/start.sh"] &amp;之间差异的一些信息。 ENTRYPOINT以及何时应该使用它们。

更好的是 - 使用Docker hub中的官方MySQL图像。通过使用环境变量,您可以实现所需的一切。