如何使用docker-compose在Docker镜像和入口点之间运行命令?

docker工作者撰写v3

我试图运行一些特定于应用程序的命令,比如每当我运行docker docker-compose up时使用composer update ,让我的docker-compose.yml文件看起来像这样

 version: '3' services: app1: image: laraedit/laraedit ports: - 3000:80 volumes: - ./appfolder:/var/www/appfolder 

如果我在入口点运行我的第一次运行命令,它将覆盖默认laraedit / laraedit运行的所有命令。 (至less我这样认为,因为当我的入口点命令完成时容器总是停止)

我不想打扰laraedit / laraedit的启动过程,我只是想执行一些命令。

如果我不使用docker-compose,那么我将在本地使用laraedit / laraedit Dockerfile,然后我可以编辑它并在其中添加一个RUN语句。

但是由于我没有Dockerfile,并且我不能在没有closures容器的正常启动的情况下创build一个入口点,我不知道如何去执行每一次运行docker-compose up

我试过的东西:

  • 添加我自己的Dockerfile (replacelaraedit的)
  • 运行入口点脚本 (阻止laraedit的启动)
  • 将它们作为命令运行(命令没有执行)

你需要扩展自定义的laraedit / laraedit图像。 您可以像这样简单地使用Dockerfile:

 FROM laraedit/laraedit COPY my_entrypoint.sh /my_entrypoint.sh RUN chmod +x /my_entrypoint.sh ENTRYPOINT /my_entrypoint.sh 

my_entrypoint.sh是一个包含初始化命令并在最后调用原始入口点的脚本,例如:

 #!/bin/sh my_init_cmd1 my_init_cmd2 ... /original/entrypoint/script/path 

你可以通过阅读原来的laraedit Dockerfile来得到/original/entrypoint/script/path

比方说,将上面的两个文件放在一个名为docker-compose.yml的docker目录中,比你需要像这样调整docker-compose.yml:

 version: '3' services: app1: build: ./docker/ ports: - 3000:80 volumes: - ./appfolder:/var/www/appfolder