96

I am currently trying out this tutorial for node express with mongodb https://medium.com/@sunnykay/docker-development-workflow-node-express-mongo-4bb3b1f7eb1e

the first part works fine where to build the docker-compose.yml it works totally fine building it locally so I tried to tag it and push into my dockerhub to learn and try more.

this is originally what's in the yml file followed by the tutorial

version: "2"
services:
  web:
    build: .
    volumes:
      - ./:/app
    ports:
      - "3000:3000"

this works like a charm when I use docker-compose build and docker-compose up

so I tried to push it to my dockerhub and I also tag it as node-test

I then changed the yml file into

version: "2"
services:
  web:
    image: "et4891/node-test"
    volumes:
      - ./:/app
    ports:
      - "3000:3000"

then I removed all images I have previously to make sure this also works...but when I run docker-compose build I see this message error: web uses an image, skipping and nothing happens.

I tried googling the error but nothing much I can find.

Can someone please give me a hand?

starball
  • 20,030
  • 7
  • 43
  • 238
Dora
  • 6,776
  • 14
  • 51
  • 99

5 Answers5

166

I found out, I was being stupid.

I didn't need to run docker-compose build I can just directly run docker-compose up since then it'll pull the images down, the build is just to build locally

Dora
  • 6,776
  • 14
  • 51
  • 99
  • 9
    It might be worth expanding a bit on it: if instead of `build` (which you can only do by pointing to specific `Dockerfile`) you use `image` then there is nothing to build because you directly use image from docker repository. – jean d'arme Dec 05 '19 at 16:05
  • 1
    If the image is built locally, then need steps like this: `docker build -t ` to build locally, `docker-compose up -d ` to recreate container and start it. – John Xiao Oct 21 '20 at 08:01
43

in my case below command worked:

docker-compose up --force-recreate

I hope this helps!

Sara Vaseei
  • 785
  • 1
  • 9
  • 15
37

Clarification: This message (<service> uses an image, skipping) is NOT an error. It's informing the user that the service uses Image and it's therefore pre-built, So it's skipped by the build command.

In other words - You don't need build , you need to up the service.

Solution:

run sudo docker-compose up <your-service>

PS: In case you changed some configuration on your docker-compose use --force-recreate flag to apply the changes and creating it again.

sudo docker-compose up --force-recreate <your-service>
avivamg
  • 12,197
  • 3
  • 67
  • 61
7

My problem was that I wanted to upgrade the image so I tried to use:

  • docker build --no-cache
  • docker-compose up --force-recreate
  • docker-compose up --build

None of which rebuild the image.

What is missing ( from this post ) is:

docker-compose stop
docker-compose rm -f # remove old images
docker-compose pull  # download new images
docker-compose up -d
Wayne Walker
  • 2,316
  • 3
  • 23
  • 25
1

In my case I was missing the build section in docker-compose.yml file, which resulted in exactly the same message being printed:

abc_service uses an image, skipping

The solution was to add the missing build section, e.g.:

  abc_service:
    image: abc_service-1.0.0
    build:
      context: .
      dockerfile: src/abc_service/Dockerfile

This answer basically expands the comment from @jean-darme

Michal
  • 56
  • 6