如何使用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