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

uwopmtnx  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(495)

当我试图通过运行上一个团队在我的ubuntu16.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'@'%'"

拜托,有什么帮助吗?

nszi6y05

nszi6y051#

RUN dockerfile中的语句用于运行一个命令,该命令将对文件系统产生一些影响,然后保存在另一层中。
像这样启动服务是不正常的,因为内存的状态(服务运行的地方)没有存储在映像中,它只能在运行的容器中运行。
通常的方法是编写bash脚本(称为 start.sh ,或类似的内容),将其复制到图像中,然后从 ENTRYPOINT / CMD dockerfile末尾的行。此操作将在中创建容器时运行 docker run ... 命令
开始.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"]

请阅读这里,了解一下两者之间的区别 ENTRYPOINT & CMD 以及什么时候应该使用它们。
更好的方法是使用docker hub的官方mysql图像。通过使用环境变量,您可能可以实现所需的所有功能。

相关问题