我剛剛開始使用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