我有以下.gitlab-ciyaml,其中一個測驗階段和 2 個服務遠程瀏覽器和 docker 服務。
image: python:3.8
stages:
- test
variables:
BROWSER: chrome
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
.job_template:
before_script:
- apt update
- apt install -y curl docker.io
- docker run -d -p 80:80 nginx
- pip3 install -r requirements.txt
script:
- curl http://docker
- pytest -vs --browser=$BROWSER --local='false'
e2e:remote:chrome:
extends: .job_template
services:
- selenium/standalone-chrome
- docker:dind
only:
variables:
- $BROWSER == 'chrome'
在 docker 服務上,我在埠 80 上運行 nginx 服務器,curl http://docker命令回傳 nginx 歡迎頁面源代碼,但是當涉及到 pytest 命令時,會進行以下測驗
from pytest import raises
from selenium.common.exceptions import NoSuchElementException
def test_query_window_is_visible(remote_browser):
remote_browser.get('http://docker')
#query_window = remote_browser.find_element_by_name('q')
print(remote_browser.page_source.encode("utf-8"))
assert query_window.is_displayed()
我出現以下錯誤:
response = {'status': 500, 'value': '{"value":{"error":"unknown error","message":"unknown error: net::ERR_NAME_NOT_RESOLVED\n (...\n# 22 0x55df1954a60c \u003Cunknown>\n#23 0x55df19563c6d \u003Cunknown>\n#24 0x7fd4ebddb609 \u003Cunknown>\n"}}'}
uj5u.com熱心網友回復:
簡短的回答
您應該將此添加到作業變數FF_NETWORK_PER_BUILD: "true"中。
variables:
FF_NETWORK_PER_BUILD: "true" # Define it here if you have many e2e test jobs.
...
e2e:remote:chrome:
extends: .job_template
variables:
FF_NETWORK_PER_BUILD: 1 # you can use "true" or 1 to enable it
services:
- selenium/standalone-chrome
- docker:dind
only:
variables:
- $BROWSER == 'chrome'
長答案
默認情況下,GitLab 運行器(Docker 執行器)使用docker 網路鏈接build將服務與運行作業的容器連接起來,從作業容器(默認呼叫)創建一對多關系。您可以在官方檔案的服務頁面中了解更多資訊
這意味著在services默認情況下定義的容器不能互相訪問。
要使服務相互連接并與build作業連接,您應該啟用FF_NETWORK_PER_BUILD功能標志。啟用此功能標志 GitLab 運行器為作業創建一個 docker 橋接網路,并使用它而不是鏈接來連接該作業中定義的容器(主build容器和services容器。)
您可以在此處和此處了解更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/454799.html
