2017-07-20 36 views
4

我想創建一個Docker組合以消除運行我的測試所需的命令數。我的目標是運行一個命令,它會啓動我的容器並運行我的測試。這是我第一次創建碼頭工作人員撰寫文件,請耐心等待。 docker-compose.file位於其他兩個dockerfiles旁邊。下面是我已經發起的碼頭作曲,但我甚至無法制作圖像。我試圖指定路徑購買添加「卷: - 。:。」但它仍然不起作用。多個Dockerfiles在構建Docker-compose中的圖像時出現故障

services: 
     headless-chrome: 
     build: ./Dockerfile-headless-chrome 
     dev-server: 
     build: ./Dockerfile 

Traceback (most recent call last): 
    File "/usr/local/bin/docker-compose", line 11, in <module> 
    sys.exit(main()) 
    File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 68, in main 
    command() 
    File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 118, in perform_command 
    handler(command, command_options) 
    File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 926, in up 
    scale_override=parse_scale_args(options['--scale']), 
    File "/usr/local/lib/python2.7/site-packages/compose/project.py", line 401, in up 
    svc.ensure_image_exists(do_build=do_build) 
    File "/usr/local/lib/python2.7/site-packages/compose/service.py", line 311, in ensure_image_exists 
    self.build() 
    File "/usr/local/lib/python2.7/site-packages/compose/service.py", line 888, in build 
    buildargs=build_args 
    File "/usr/local/lib/python2.7/site-packages/docker/api/build.py", line 137, in build 
    raise TypeError("You must specify a directory to build in path") 
TypeError: You must specify a directory to build in path 
version: "3" 

爲了運行我用做這個測試: 殼牌1:

$ SCHEME=http ENV=stage DOCKER_DEV_ENTRYPOINT='"npm run dev-server"' make docker-dev 

當這個運行過程中,我需要運行下面在一個新的外殼(外殼2)中:

$ docker build -t headless-chrome -f Dockerfile-headless-chrome . 
$ docker run -it --rm --net=host --cap-add=SYS_ADMIN headless-chrome /bin/bash 

然後,當IM的容器內進出口運行:

$ npm run selenium-docker 
$ npm run uat 

回答

7

TypeError: You must specify a directory to build in path

當您添加build: ./Dockerfile-headless-chrome到您的碼頭工人,compose.yml,您設置的背景文件夾,而不是Dockerfile文件。你想要的屬性是構建 - > dockerfile

services: 
    headless-chrome: 
     build: 
     context: . 
     dockerfile: Dockerfile-alternate 
    dev-server: 
     build: . 

對於dev-server我沒有進行任何設置,因爲它會使用默認值(context: .dockerfile: Dockerfile)。實際上,您也不需要在無頭鍍鉻處使用context: .,因爲它是默認設置。

Docker Compose reference - build

編輯 - 第2部分

還有在命令中的問題。要使其自動化,您必須更改/bin/bash

創建所有的測試文件(entrypoint.sh):

npm run selenium-docker 
npm run uat 

這個文件添加到您的圖像(ADD)和啓動容器(CMD)運行它。

# Dockerfile 

... your commands 

ADD entrypoint.sh 
CMD bash entrypoint.sh 

它已經準備好了。再次編譯docker-compose build(因爲您編輯了Dockerfile)並運行docker-compose up

+0

謝謝!我嘗試了上述解決方案。但我收到另一個問題:警告:圖像服務headless-chrome是由於它尚不存在而構建的。要重建此圖像,您必須使用'docker-compose build'或'docker-compose up --build'。 重新創建yetiui_dev-server_1 ... 重新創建yetiui_dev-server_1 創建yetiui_headless-chrome_1 ... 重新創建yetiui_dev-server_1 ...完成 附加到yetiui_headless-chrome_1,yetiui_dev-server_1 headless-chrome_1 |/bin/bash:-c:選項需要參數 yetiui_headless-chrome_1使用代碼2退出 yetiui_dev-server_1使用代碼0退出 – ladyinwhite

+1

您需要爲'/ bin/bash'指定命令。如果你不想運行任何命令,那麼你可以把它放在一起,然後運行 'docker run -it --rm --net = host --cap-add = SYS_ADMIN headless-chrome' – Ayushya

+0

@Rafael,謝謝!現在測試運行,存在的一個小問題是它似乎沒有等到dev-server運行。我試圖添加depends_on:dev-server,但它不覺得它有效果。在我的硒啓動之前,似乎dev-server會以代碼0退出。 – ladyinwhite