当我尝试通过在我的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'@'%'"
请帮忙吗?
答案 0 :(得分:1)
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图像。通过使用环境变量,您可以实现所需的一切。