#docker #docker-compose #dockerfile
#docker #docker-compose #dockerfile
Вопрос:
Я использую Docker, который работает нормально.
Я могу запустить образ Docker с помощью docker-compose.
docker-compose rm nodejs; docker-compose rm db; docker-compose up --build
Я прикрепил оболочку к контейнеру Docker с помощью
docker exec -it nodejs_nodejs_1 bash
Я могу просматривать файлы внутри контейнера
(inside container)
cat server.js
Теперь, когда я редактирую server.js
файл внутри host, я хотел бы, чтобы файл внутри контейнера изменился без необходимости перезапуска Docker.
Я пытался добавить volumes
в docker-compose.yml
файл или в Dockerfile, но почему-то я не могу заставить это работать.
(Dockerfile, not working)
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
VOLUMES ["/usr/src/app"]
EXPOSE 8080
CMD [ "npm", "run", "watch" ]
или
(docker-compose.yml, not working)
version: "3.3"
services:
nodejs:
build: ./nodejs-server
ports:
- "8001:8080"
links:
- db:db
env_file:
- ./.env-example
volumes:
- src: /usr/src/app
db:
build: ./mysql-server
volumes:
- ./mysql-server/data:/docker-entrypoint-initdb.d #A folder /mysql-server/data with a .sql file needs to exist
env_file:
- ./.env-example
volumes:
src:
Вероятно, где-то есть простое руководство, но я его пока не нашел.
Комментарии:
1. используйте тома в файле compose следующим образом: ./path/to/application:/usr /src/app
Ответ №1:
Если вы хотите, чтобы копия файлов была видна в контейнере, используйте том bind mount (он же том host) вместо именованного тома.
Предполагая, что ваш файл docker-compose.yml находится в корневом каталоге нужного вам местоположения в / usr / src / app, вы можете изменить свой docker-compose.yml следующим образом:
version: "3.3"
services:
nodejs:
build: ./nodejs-server
ports:
- "8001:8080"
links:
- db:db
env_file:
- ./.env-example
volumes:
- .:/usr/src/app
db:
build: ./mysql-server
volumes:
- ./mysql-server/data:/docker-entrypoint-initdb.d #A folder /mysql-server/data with a .sql file needs to exist
env_file:
- ./.env-example
Комментарии:
1. В моем случае местоположение, которое я хочу сохранить,
/usr/src/app
находится во вложенной папкеnodejs-server
. Я изменил вашу строку- .:/usr/src/app
на- ./nodejs-server:/usr/src/app
, и это работает 🙂