'Okteto doesn't sync file changes even though syncthing reports changes
I'm using Okteto CLI version 2.2.1, MacOS Monterey (Macbook 2015). I've cloned and deployed their playground app and created the following Okteto configuration:
name: movies-with-compose
# The build section defines how to build the images of your development environment
# More info: https://www.okteto.com/docs/reference/manifest/#build
build:
# You can use the following env vars to refer to this image in your deploy commands:
# - OKTETO_BUILD_API_REGISTRY: image registry
# - OKTETO_BUILD_API_REPOSITORY: image repo
# - OKTETO_BUILD_API_IMAGE: image name
# - OKTETO_BUILD_API_TAG: image tag
api:
context: api
dockerfile: api/Dockerfile
# You can use the following env vars to refer to this image in your deploy commands:
# - OKTETO_BUILD_FRONTEND_REGISTRY: image registry
# - OKTETO_BUILD_FRONTEND_REPOSITORY: image repo
# - OKTETO_BUILD_FRONTEND_IMAGE: image name
# - OKTETO_BUILD_FRONTEND_TAG: image tag
frontend:
context: frontend
dockerfile: frontend/Dockerfile
# You can use the following env vars to refer to this image in your deploy commands:
# - OKTETO_BUILD_INIT_REGISTRY: image registry
# - OKTETO_BUILD_INIT_REPOSITORY: image repo
# - OKTETO_BUILD_INIT_IMAGE: image name
# - OKTETO_BUILD_INIT_TAG: image tag
init:
context: api
dockerfile: api/Dockerfile
# You can use the following env vars to refer to this image in your deploy commands:
# - OKTETO_BUILD_MOVIES_REGISTRY: image registry
# - OKTETO_BUILD_MOVIES_REPOSITORY: image repo
# - OKTETO_BUILD_MOVIES_IMAGE: image name
# - OKTETO_BUILD_MOVIES_TAG: image tag
movies:
context: reverse-proxy
dockerfile: reverse-proxy/Dockerfile
# The deploy section defines how to deploy your development environment
# More info: https://www.okteto.com/docs/reference/manifest/#deploy
deploy:
compose:
file: docker-compose.yml
# The dependencies section defines other git repositories to be deployed as part of your development environment
# More info: https://www.okteto.com/docs/reference/manifest/#dependencies
# dependencies:
# - https://github.com/okteto/sample
# The dev section defines how to activate a development container
# More info: https://www.okteto.com/docs/reference/manifest/#dev
dev:
api:
command:
- yarn
- start
sync:
- api:/usr/src/app
environment:
- MONGODB_DATABASE=okteto
- MONGODB_HOST=mongodb
- MONGODB_PASSWORD=mongodb123
- MONGODB_USERNAME=okteto
forward:
- 8081:8080
frontend:
image: okteto/node:14
command: bash
workdir: /src
sync:
- frontend:/src
forward:
- 9229:9229
- 8080:80
movies:
command: bash
workdir: /usr/src/app
sync:
- .:/usr/src/app
forward:
- 9229:9229
- 8080:80
I'm deploying the api
container and no matter what file changes I perform to server.js
they're not reflected in the deployment. I ran okteto status --info
to get the remote Syncthing URL and it does display that server.js
was changed when I click Recent Changes:
I started okteto by running okteto up
and this is the output I get:
I can't figure out why changes to files which I make on my local machine are not reflected in okteto deployment (they're only reflected if I run okteto build
and then re-deploy). Perhaps I misunderstood Okteto docs but I expected for file changes to be reflected instantly in okteto deployment.
The dockerfile for the service I'm starting in Okteto is:
FROM node:14
WORKDIR /src
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
EXPOSE 8080
CMD ["yarn", "start"]
EDIT: the issue shouldn't occur anymore as a pull request fixing the issue was merged
Solution 1:[1]
The issue was that the volume in docker-compose.yml
for the api
service is:
volumes:
- api:/usr/src/app
which is incorrect because the nodejs app is located in /src
folder. Then when running okteto init
the okteto manifest will automatically set the sync folder to api:/usr/src/app
so any file changes locally will not result in updates in okteto cluster. Setting the volume in docker-compose.yml to be:
volumes:
- api:/src
will solve the issue. In general I'm not sure volume should be defined at all in docker-compose.yml, I think it's enough to just define sync folder in okteto.yml
(at least it worked for me because I guess Syncthing syncs files regardless of docker volume).
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Yos |