我有两个问题。
FROM
命令中添加MySQL图像,那就完成了
运行MySQL映像的entrypoint
和CMD
?我无法找到
关于那个的文件。我正在尝试创建可重现的开发数据库容器。目前我使用docker exec
命令导入数据库,但我更愿意将其合并为一步。
以下是我创建的Dockerfile的内容。
FROM mysql:5.5.44
COPY sql/devdb.sql /root/
CMD mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /root/devdb.sql
当我去运行它时,我收到错误:
ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器 &#39; /tmp/mysql.sock' (2)
我发现MySQL服务器甚至没有运行,这让我觉得没有父图像的命令运行?
我在MySQL Docker Registry评论页面中找到了CMD
建议,但我显然做错了。
我将不胜感激任何帮助。谢谢!
答案 0 :(得分:2)
- 如果我在Dockerfile的FROM命令中添加MySQL图像,它是否运行MySQL图像的
醇>ENTRYPOINT
和CMD
?
是的,只要您不在Dockerfile中添加自己的ENTRYPOINT
或CMD
指令。
- 如何通过Dockerfile创建可重现的开发数据库容器?
醇>
当您执行 RUN
,ENTRYPOINT
和CMD
时,您缺少的是理解。
RUN
指令执行à构建时间。当你docker build ...
时。
ENTRYPOINT
和CMD
指令仅在运行时执行。当您执行docker run
或docker start
。
有了这些知识,现在很清楚为什么没有MySQL服务器在构建时运行。因此,您无法在构建时将数据导入MySQL服务器。
但是,您可以做的是保留COPY
指令,以便要启动的容器将准备导入sql数据,然后还提供您自己的入口点脚本,该脚本将负责(在运行时)时间)执行MySQL镜像提供的/entrypoint.sh
脚本,然后导入你的sql数据。
在my-custom-entrypoint.sh
Dockerfile
文件
#!/bin/bash
# first things first, call the MySQL image provided entrypoint script
# "$@" is to pass all parameters as they are provided
/entrypoint.sh "$@"
# then import the sql data
mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /root/devdb.sql
您的Dockerfile
就是
FROM mysql:5.5.44
COPY sql/devdb.sql /root/
COPY my-custom-entrypoint.sh /
ENTRYPOINT ["/my-custom-entrypoint.sh"]