Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Connection issues, when using docker-dind service at Gitlab CI #437

Open
playpauseandstop opened this issue May 17, 2020 · 1 comment
Open

Comments

@playpauseandstop
Copy link

playpauseandstop commented May 17, 2020

Long story short

At Gitlab CI, when docker-dind service used, docker pull ... command works, while await docker.images.pull(...) does not.

  • Expected behaviour: await docker.images.pull("playpauseandstop/docker-python:3.2.0-py38") works as well as docker pull -q playpauseandstop/docker-python:3.2.0-py38
  • Actual behaviour: DockerError(404, "page not found")

How to reproduce

I have a project, which uses aiodocker and want to test it at Gitlab CI.

For achieving that, I'm trying to use docker-dind service with TLS enabled, as described in docs. However I'm unable to do requests to the docker from aiodocker, cause all them ends with DockerError(404, "page not found") error.

In same time docker ... commands executes well within same Gitlab CI job.

Test Job definition
image: "playpauseandstop/docker-python:3.2.0-py38"

test:
  stage: "test"
  cache:
    <<: *cache
    policy: "pull"
  variables:
    DOCKER_CERT_PATH: "/certs/client"
    DOCKER_DRIVER: "overlay2"
    DOCKER_HOST: "tcp://docker:2376/"
    DOCKER_TLS_CERTDIR: "/certs"
    DOCKER_TLS_VERIFY: "1"
    PYTHONPATH: "."
  services:
    - "docker:19.03.8-dind"
  before_script:
    - "apt update -y"
    - "apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common"
    - "curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -"
    - 'add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"'
    - "apt update -y"
    - "apt install -y docker-ce-cli"
    - "docker info"
  script:
    - "docker pull -q playpauseandstop/docker-python:3.2.0-py38"
    - "${MAKE} test-only"
  after_script:
    - "docker images"

It makes me wonder, why script below works (test.script[0]),

docker pull -q playpauseandstop/docker-python:3.2.0-py38

When next code does not (inside of test.script[1]),

async def main() -> int:
    image = "playpauseandstop/docker-python:3.2.0-py38"

    try:
        async with Docker() as docker:  # type: ignore
            await docker.images.pull(image)
    except DockerError:
        logger.error(f"Unable to pull docker image {image!r}", exc_info=True)
        return 1

    logger.info(f"Docker image is ready: {image!r}")
    logger.info("All OK!")

    return 0

Full output of test.script,

$ docker pull -q playpauseandstop/docker-python:3.2.0-py38
docker.io/playpauseandstop/docker-python:3.2.0-py38
$ ${MAKE} test-only
DOCKER_IMAGE=playpauseandstop/docker-python:3.2.0-py38 poetry run python ./scripts/prepare-image.py
2020-05-17 13:33:13,133 [ERROR:scripts.prepare-image] Unable to pull docker image 'playpauseandstop/docker-python:3.2.0-py38'
Traceback (most recent call last):
  File "./scripts/prepare-image.py", line 19, in main
    await docker.images.pull(image)
  File "/builds/group/project/.venv/lib/python3.8/site-packages/aiodocker/images.py", line 133, in _handle_list
    async with cm as response:
  File "/builds/group/project/.venv/lib/python3.8/site-packages/aiodocker/utils.py", line 309, in __aenter__
    resp = await self._coro
  File "/builds/group/project/.venv/lib/python3.8/site-packages/aiodocker/docker.py", line 264, in _do_query
    raise DockerError(response.status, json.loads(what.decode("utf8")))
aiodocker.exceptions.DockerError: DockerError(404, 'page not found')
make: *** [Makefile:40: prepare-image-only] Error 1

I'm reusing same env vars between test.script[0] & test.script[1],

  • DOCKER_HOST
  • DOCKER_TLS_VERIFY
  • DOCKER_CERT_PATH

And not sure why it results in "page not found" error. Any ideas on what I'm missing?

Thanks in advance.

ps. At localhost, everything works fine.

Your environment

  • Gitlab Runner: 12.10.2
  • Docker Service: docker:19.03.8-dind
  • Python Version: 3.8.2
@playpauseandstop playpauseandstop changed the title Connection issues, when using docker-dind service in Gitlab CI Connection issues, when using docker-dind service at Gitlab CI May 17, 2020
@asvetlov
Copy link
Member

asvetlov commented Jul 7, 2020

Sorry, I have no idea what's wrong with dind

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants