当我尝试通过在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以获得有关
ENTRYPOINT
和CMD
之间的区别以及何时使用它们的一些信息。更好的是-使用Docker hub中的官方MySQL映像。通过使用环境变量,您可能可以实现所需的全部功能。
关于mysql - 错误:命令'/bin/sh返回了非零代码:1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50630722/