我刚刚开始使用Docker,前几天我对结果非常满意。我目前只是为了开发目的而尝试它。docker-compose - 运行两个服务来执行一个PHP脚本
我使用docker-compose
,这是我docker-compose.yaml
:
version: '2'
services:
nginx:
image: nginx:alpine
ports:
- "8070:80"
volumes:
- ./:/app
- ./docker-nginx-default.conf:/etc/nginx/conf.d/default.conf
php7:
container_name: php7
image: adrian1210/php
volumes:
- ./:/app:delegated
environment:
XDEBUG_CONFIG: "remote_host=192.168.5.14"
composer:
entrypoint: /bin/true
image: composer
volumes:
- ./:/app
command: install --ignore-platform-reqs --no-scripts
mongodb:
image: mongo
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
volumes:
- ./data/db:/data/db
ports:
- 8080:27017
command: mongod --smallfiles --logpath=/dev/null # --quiet
一切工作好了。
但是我现在有一个问题,也许我完全不理解这个,但是我搜索了官方文档/ SO并没有找到可以满足的答案。
我有一个PHP脚本,我只想从我的主机操作系统运行。类似于使用composer安装PHP依赖项。当安装PHP的依赖关系,我只想跑
docker run --rm --interactive --tty --volume $PWD:/app composer install --ignore-platform-reqs --no-scripts
和所有的作品。
现在我有一个PHP脚本,我需要以相同的方式执行,意思是'执行并关闭所有内容'。
问题是,为了脚本完全执行,我需要启动并运行我的mongodb容器,因为脚本正在写入数据库。
所以,因为我必须MongoDB的容器,我试图用docker-compose
执行脚本,而不是用docker
:
docker-compose run php7 php /app/Apps/Php/Cli/install.php
但它抛出的错误,认为它不能访问MongoDB的。
这是真的,如果我输入docker ps
,容器不在那里。
但是,如果我例如。用docker-compose up -d
运行整个环境并输入docker ps
后,我会看到mongodb正在运行,当然,如果我再次运行上面的install.php
脚本,它将起作用。
所以我的问题是,我可以以某种方式一起运行php7 + mongodb服务,并在脚本完成后立即关闭它们?
更新1:DID工作调整docker-compose.yaml
一方面,PHP7服务,现在它看起来像这样:
php7:
container_name: php7
image: adrian1210/php
volumes:
- ./:/app:delegated
environment:
XDEBUG_CONFIG: "remote_host=192.168.5.14"
links:
- mongodb
因此,大家可以看到,我添加links
节它的工作。当使用此参数运行脚本时(我使用了相同的docker-compose run ...
命令),我可以在控制台中看到mongodb正在启动。
现在,唯一没有奏效的是脚本完成后,mongodb仍在运行。 php7被正确关闭。
所有这些,恐怕我不知道links
参数是如何工作的。我的意思是,在官方的文档,我可以读到links
是的东西,是在docker-compose.yaml
1版本中使用,所有服务将自动链接到默认的网络。也许调用docker-compose up
,不docker-compose run
当这种行为仅适用?
我只是想谢谢大家的回答。如果有任何其他解决方案,将搜索一下。 – Adrian