Docker Compose does not allow to use local images

后端 未结 9 1786
-上瘾入骨i
-上瘾入骨i 2020-12-24 00:33

The following command fails, trying to pull image from the Docker Hub:

$ docker-compose up -d
Pulling web-server (web-server:staging)...
ERROR: repository we         


        
相关标签:
9条回答
  • 2020-12-24 00:39

    In my tests, for this to work you must specify a numeric tag otherwise docker will try to check for the latest version remotely.

    Rename your local image to something like 'web-server:1' instead of 'web-server:staging' and change your compose file accordingly.

    0 讨论(0)
  • 2020-12-24 00:40

    In your docker-compose.yml, you can specify build: . instead of build: <username>/repo> for local builds (rather than pulling from docker-hub) - I can't verify this yet, but I believe you may be able to do relative paths for multiple services to the docker-compose file.

    services:
      app:
        build: .
    

    Reference: https://github.com/gvilarino/docker-workshop

    0 讨论(0)
  • 2020-12-24 00:43

    In general, this should work as you describe it. Tried to reproduce it, but it simply worked...

    Folder structure:

    .
    ├── docker-compose.yml
    └── Dockerfile
    

    Content of Dockerfile:

    FROM alpine
    CMD ["echo", "i am groot"]
    

    Build and tag image:

    docker build -t groot .
    docker tag groot:latest groot:staging
    

    with docker-compose.yml:

    version: '3.1'
    services:
      groot:
        image: groot:staging
    

    and start docker-compose:

    $ docker-compose up
    Creating groot_groot ... 
    Creating groot_groot_1 ... done
    Attaching to groot_groot_1
    groot_1  | i am groot
    groot_groot_1 exited with code 0
    
    0 讨论(0)
  • 2020-12-24 00:44

    You have a DOCKER_HOST entry in your .env

    0 讨论(0)
  • 2020-12-24 00:53

    One can reference the local image name without a tag as well

    docker build -t imagename .
    

    can be referenced as:

    version: "3"
    services:
      web:
        image: imagename
    

    in the docker-compose yaml.

    0 讨论(0)
  • 2020-12-24 00:56

    March-09-2020 EDIT:

    (docker version 18.09.9-ce build 039a7df, dockercompose version 1.24.0, build 0aa59064)

    I found that to just create a docker container, you can just docker-compose 'up -d' after tagging the container with a fake local registry server tag (localhost:5000/{image}).

    $ docker tag {imagename}:{imagetag} localhost:5000/{imagename}:{imagetag}
    

    You don't need to run the local registry server, but need to change the image url in dockercompose yaml file with the fake local registry server url:

    version: '3'
    services:
    web-server:
      image: localhost:5000/{your-image-name} #change from {imagename}:{imagetag} to localhost:5000/{imagename}:{imagetag}
      ports:
        - "80:80"
    

    from {imagename}:{imagetag} to localhost:5000/{imagename}:{imagetag}

    and just up -d

    $ docker-compose -f {yamlfile}.yaml up -d 
    

    This creates the container if you already have the image (localhost:5000/{imagename}) in your local machine.


    Adding to @Tom Saleeba's response,

    I still got errors after tagging the container with "/" (for ex: victor-dombrovsky/docker-image:latest) It kept looking for the image from remote docker.io server.

    registry_address/docker-image
    

    It seems the url before "/" is the registry address and after "/" is the image name. and without "/" provided, docker-compose by default looks for the image from the remote docker.io.

    It guess it's a known bug with docker-compose

    I finally got it working by running the local registry, pushing the image to the local registry with the registry tag, and pulling the image from the local registry.

    $ docker run -d -p 5000:5000 --restart=always --name registry registry:2
    $ docker tag your-image-name:latest localhost:5000/your-image-name
    $ docker push localhost:5000/your-image-name
    

    and then change the image url in the dockerfile:

    version: '3'
    services:
      chat-server:
        image: chat-server:staging
        ports:
          - "8110:8110"
      web-server:
        image: localhost:5000/{your-image-name} #####change here
        ports:
          - "80:80"
          - "443:443"
          - "8009:8009"
          - "8443:8443"
    

    Similarly for the chat-server image.

    0 讨论(0)
提交回复
热议问题