如何使用docker compose在docker映像和入口点之间运行命令? docker compose v3
每当我运行docker compose up时,我都会尝试运行一些特定于应用程序的命令,比如如何使用docker compose在docker映像和入口点之间运行命令? docker compose v3,docker,command,docker-compose,dockerfile,Docker,Command,Docker Compose,Dockerfile,每当我运行docker compose up时,我都会尝试运行一些特定于应用程序的命令,比如composer update,让我的docker-compose.yml文件看起来像这样 version: '3' services: app1: image: laraedit/laraedit ports: - 3000:80 volumes: - ./appfolder:/var/www/appfolder 如果我在入口点运行我的第一
composer update
,让我的docker-compose.yml文件看起来像这样
version: '3'
services:
app1:
image: laraedit/laraedit
ports:
- 3000:80
volumes:
- ./appfolder:/var/www/appfolder
如果我在入口点运行我的第一个run命令,它将覆盖默认的laraedit/laraedit正在运行的所有命令。(至少我这么认为,因为当我的entrypoint命令完成时,容器总是停止)
我不想打扰laraedit/laraedit启动的过程,我只想在一旁执行几个命令
如果我没有使用docker compose,那么我将在本地使用laraedit/laraedit Dockerfile,然后我可以编辑它并在其中的某个位置添加一个RUN语句
但由于我没有Dockerfile,而且我无法在不中断容器正常启动的情况下创建入口点,因此我不知道如何在每次运行docker compose
时自动运行这些枯燥的命令
我尝试过的事情:
- 添加我自己的(替换laraedit的)
- 运行(阻止其启动的)
- 将它们作为一个命令运行(命令未执行)
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
值
假设您将上面的2个文件放在docker-compose.yml旁边名为docker
的目录中,然后您需要调整docker-compose.yml,如下所示:
version: '3'
services:
app1:
build: ./docker/
ports:
- 3000:80
volumes:
- ./appfolder:/var/www/appfolder
另外,如果您不想使用“laraedit/laraedit”图像,则必须使用不同的Dockerfile对其进行编辑。通过新创建的Dockerfile创建新图像并在撰写文件中使用它。我也在等待答案:-)。这是原始的dockerfile吗?如果是,当覆盖
命令
或入口点
时,supervisords
是否正在运行?@ItayB是,这是正确的dockerfile。当覆盖docker compose.yml
中的命令
或入口点
值时,supervisord
永远不会运行。你可以做一个难看的破解,在后台启动supervisord(&),然后运行你的东西,然后在为真时睡1。。有道理?有道理是的。但对我来说太难看了。