这是我的Dockerfile:
FROM node:4
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY code/* /usr/src/app/
EXPOSE 3000
VOLUME /usr/src/app/
我的Docker Compose文件:
version: '2.0'
services:
my_service:
build: .
volumes:
- ./app:/usr/src/app
ports:
- 8102:3000
working_dir: /usr/src/app/
command: node src/app.js
restart: always
当我进行构建时:
docker-compose build
Building api_core
Step 1 : FROM node:4
---> 93b396996a16
Step 2 : RUN mkdir -p /usr/src/app
---> Using cache
---> e1ee4fd2245d
Step 3 : WORKDIR /usr/src/app
---> Using cache
---> 8824a653a9e4
Step 4 : COPY code/* /usr/src/app/
---> Using cache
---> 5e4ee9901369
Step 5 : EXPOSE 3000
---> Using cache
---> 0e10126e1651
Step 6 : VOLUME /usr/src/app/
---> Using cache
---> c1f9d36d91bc
Successfully built c1f9d36d91bc
当我跑步时,我收到了这个错误:
docker-compose up
Error: Cannot find module '/usr/src/app/src/app.js
所以Docker告诉我它没有找到app.js,所以就像COPY没有工作一样!
答案 0 :(得分:2)
你是对的,你将你的应用程序复制到docker镜像中。
但是在你的docker compose部分中,你挂载了- ./app:/usr/src/app
所以#34; ./ app"文件夹(在您的主机上)安装在/ usr / src / app的docker容器中,因此您在dockerfile中复制的内容会被挂载点覆盖。
答案 1 :(得分:1)
您在撰写文件中明确指定了卷映射:
volumes:
- ./app:/usr/src/app
这将覆盖您之前在Dockerfile
中指定的内容:
COPY code/* /usr/src/app/
两种语句可能会提供不同的结果,具体取决于您构建映像的位置以及启动容器的位置。您应该检查与您的撰写文件映射的内容是否会产生相同的结果。