Dockerfile中的入口点

时间:2019-09-19 13:47:21

标签: mysql docker

我制作了docker镜像。

我正确复制了init.sql脚本。另外,我正确配置了数据库。当我在容器内没有ENTRYPOINT的情况下运行此命令时,一切正常,但是当我将此命令添加到Dockerfile到ENTRYPOINT并再次构建映像时,我看到显示的内容类似于mysql手册页。退出(1)。我无法获取任何日志,此命令可能有什么问题?

我认为这不是数据库问题,而是Docker本身。

ENTRYPOINT ["mysql", "-u", "my_user", "-pmy_pw",  "my_databse", "<", "init.sql"]

2 个答案:

答案 0 :(得分:2)

正如您在documentation中所读到的那样,exec格式不会使用sh或bash shell执行命令。因此重定向将无法在其中进行。

为了使该入口点正常工作,您应该重写它:

const coordinateArray = [[46,11], [38,11], [44,9], [81,15], [55,15]];
const matched = coordinateArray.reduce((out,arr) => ({...out, [arr[1]]: [arr, ...(out[arr[1]] || [])]}), {});
console.log(Object.values(matched));

答案 1 :(得分:1)

您确实需要覆盖数据库容器入口点,因为入口点执行一些复杂的操作,例如从映射的初始化脚本创建数据库并设置用户等。

您需要使用容器路径main.cf映射"init.sql"

初始化一个新实例

  

首次启动容器时,将使用   指定的名称将创建并使用提供的名称进行初始化   配置变量。此外,它将执行带有   在以下位置找到的扩展名/docker-entrypoint-initdb.d   .sh, .sql and .sql.gz。文件将按字母顺序执行   订购。您可以通过安装SQL轻松填充mysql服务   转储到该目录并提供具有贡献的自定义图像   数据。默认情况下,SQL文件将导入到指定的数据库   通过/docker-entrypoint-initdb.d变量。