2017-05-03 262 views
2

我似乎無法在Dockerfile中運行Composer安裝,但是我可以在構建映像並運行容器後在容器中運行。在Dockerfile中運行時,Composer安裝不會安裝軟件包

下面是從Dockerfile命令:

RUN composer require drupal/video_embed_field:1.5 
RUN composer install --no-autoloader --no-scripts --no-progress 

輸出是:

Loading composer repositories with package information 
Installing dependencies (including require-dev) from lock file 
Nothing to install or update 

但使用了搬運工,撰寫容器後:

... 
drupal: 
    image: docker_image 
    container_name: container 
    ports: 
     - 8081:80 
    volumes: 
     - ./container/modules:/var/www/html/web/modules 

    links: 
     # Link the DB container: 
     - db 

運行搬運工EXEC作曲家安裝將正確安裝軟件包:

Loading composer repositories with package information 
Installing dependencies (including require-dev) from lock file 
Package operations: 1 installs, 0 updates, 0 removals 
... 
Generating autoload files 

我假定composer.json和composer.lock文件是正確的,因爲我可以在容器中運行composer install命令,而無需進一步的努力,但只能在容器運行後。與

更新 試圖結合作曲家命令:

RUN composer require drupal/video_embed_field:1.5 && composer install 

同樣的問題, 「沒有安裝或更新」。最終,我想繼續在Dockerfile中使用單獨的RUN語句來利用docker緩存。

+0

嘗試只使用一個RUN,如'RUN作曲者...... &&作曲者......' – user2915097

+0

試過了,沒有運氣。更新問題以包含詳細信息。 –

+1

這是因爲你的'composer.lock'和'composer.json'在安裝的音量上,我猜?然後,原因是在映像創建後實際發生掛載,所以在你的兩條'RUN'語句之後 –

回答

1

你的問題是從,docker-compose是爲了協調多個泊塢窗容器構建,並在同一時間運行的事實來了,它在某種程度上是不是真的出輕鬆做什麼的現場開始泊塢窗後面的人。

一個docker-compose up後面有四個步驟:

  • docker-compose build如果需要的話,並且如果沒有現有的(多個)圖像的是,如果需要創建圖像(多個)
  • docker-compose create,如果有沒有容器(一個或多個)還存在,創建容器的容器(一個或多個)
  • docker-compose start開始現有的容器(一個或多個)
  • docker-compose logs日誌stderr和標準輸出

所以,你必須在那裏發現的事實是,包含在你的行動Dockerfile是在圖像創建步驟執行的。
在容器啓動時執行安裝文件夾步驟。

因此,當您嘗試使用RUN命令,圖像創建步驟的一部分,對安裝在啓動步驟一樣composer.lockcomposer.json文件,你最終有沒有通過作曲家安裝,因爲你的文件不被安裝在任何地方然而。

如果你做了一個COPY這些文件可能實際上讓你在某個地方,因爲你將作爲你的圖像的一部分作曲家文件。

這就是說,要小心,安裝的源文件夾將完全覆蓋安裝點,所以你可能最終會期待一個供應商文件夾,而沒有它。
理想情況下,您應該將它作爲ENTRYPOINT,這個發生在容器啓動的最後一步。

這裏有一個小小的發展比較:碼頭圖像是一個碼頭集裝箱什麼類是一個類的實例—一個對象。
您的容器都是根據可能很久以前建立的圖像創建的。
Dockerfile中的大多數步驟都是在創建映像時發生的,而不是在容器啓動時發生的。
雖然docker-compose的大部分指令都是針對容器構建的自動化,其中包括安裝文件夾。

相關問題