2017-07-30 83 views
0

我剛剛開始使用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當這種行爲僅適​​用?

回答

1

在這方面的links的行爲的文檔在https://docs.docker.com/compose/compose-file/#links解釋。特別是:

鏈接也以與depends_on相同的方式表示服務之間的依賴關係,因此它們確定服務啓動的順序。

所以,運行docker-compose run帶來了up的依賴服務。如果不再需要運行依賴服務,則需要明確down。它可能不會把它down一個run後因爲有可能是多次運行或其他服務,可能需要依賴於服務也是如此。

除此之外,還有一個更新的depends_on明確定義在https://docs.docker.com/compose/compose-file/#depends_on的依賴關係和順序。你不一定需要使用links在以後的碼頭工人撰寫的版本作爲服務名稱已經被添加作爲一個DNS條目的/etc/hosts文件。

+0

我只是想謝謝大家的回答。如果有任何其他解決方案,將搜索一下。 – Adrian