dockerfile cmd的等效docker exec?

dockerfile cmd的等效docker exec?,docker,dockerfile,Docker,Dockerfile,我的dockerfile的结尾如下所示: ... EXPOSE 3000 CMD someapp seed && someapp server 出于测试目的,我希望在容器完成启动后自己执行此操作,以便它不包含种子数据 这方面的等效docker exec是什么 谢谢。编写脚本docker exec通常不是最佳做法:您希望容器能够自给自足,并尽可能多地自行设置 这里一种有用的技术是使用ENTRYPOINT作为包装器脚本进行首次设置,然后以exec“$@”结束。这个神奇的shel

我的dockerfile的结尾如下所示:

...

EXPOSE 3000

CMD someapp seed && someapp server
出于测试目的,我希望在容器完成启动后自己执行此操作,以便它不包含种子数据

这方面的等效docker exec是什么


谢谢。

编写脚本
docker exec
通常不是最佳做法:您希望容器能够自给自足,并尽可能多地自行设置

这里一种有用的技术是使用
ENTRYPOINT
作为包装器脚本进行首次设置,然后以
exec“$@”
结束。这个神奇的shell行将使它运行名为
CMD
的东西

COPY entrypoint.sh。
运行chmod+x entrypoint.sh
#必须是JSON数组语法;包括“种子”步骤
入口点[“/”入口点.sh“]
CMD someapp服务器
由于入口点是一个脚本,因此可以在其中执行任何操作。例如,可以使种子设定依赖于环境变量:

#/垃圾箱/垃圾箱
如果[“$SKIP_DB_SEED”!=“yes”];然后
someapp种子
fi
执行官“$@”
使用此构造,可以在启动时设置环境变量以跳过种子设定步骤

docker运行-e SKIP\u DB\u SEED=yes someimage
这样做的另一件事是在调试容器中获得一个交互式shell,完成所有首次启动工作。在图像名称后放置的任何命令都将替换Dockerfile中的
CMD
,该文件在脚本中显示为
“$@”

docker run--rm-it someimage bash

我不太清楚你在问什么。如果不想自动运行这些命令,只需从Dockerfile中删除它们。使用shell(
docker run-it myimage bash
)从您的图像创建一个新容器,然后手动运行它们以进行测试。令人印象深刻!它显示了一些人为了得到他们想要的东西而愿意付出的时间。我需要按需运行seed,这样会破坏自动化。我只需要与dockerfile相同的结果,但在机器启动后运行它。