我没有运气去寻找解决方案。
我有2个Docker容器。 frontend
和api
。两者都需要一个文件夹及其内容models
来构建。
所有这些文件都位于一个名为Website的文件夹中,因此该树看起来像:
Website:
-models
-api
-dockerfile
-frontend
-dockerfile
-docker-compose.yml
我对docker非常陌生,并且相信这是应该如何设置的,我在api目录中的dockerfile
就像这样:
FROM node:latest
RUN mkdir -p /usr/src/app/models
WORKDIR /usr/src/app
COPY ./api/package*.json ./
RUN npm install
COPY ./api/ /usr/src/app
EXPOSE 3000
EXPOSE 3001
CMD [ "npm", "start" ]
这将在docker容器的一侧创建2个models
文件夹,其中一个文件夹不包含位于路径的文件(这是我想要的内容):
root@0aa4496c9077:/usr/src/app/models#
和另一个包含我想要它具有的内容的文件夹,但是它位于:
root@0aa4496c9077:/usr/src/app/src/models#
我的问题是:如何将“网站”目录中的文件夹和内容映射到docker容器目录/usr/src/app/models
?
我实际的docker-compose.yml文件是这样的:
version: "3"
services:
api:
container_name: api
restart: always
build:
context: ./
dockerfile: ./api/dockerfile
ports:
- "3000:3000"
- "3001:3001"
volumes:
- ./models:./models
links:
- mongo
我尝试将卷路径更改为绝对路径,例如:
volumes:
- $PWD/models:/usr/src/app/models
没有运气:(
运行docker-compose build
的构建输出为:
mongo uses an image, skipping
Building api
Step 1/8 : FROM node:latest
latest: Pulling from library/node
Digest: sha256:521df806339e2e60dfdee6e00e75656e69798c141bd2cff88c0c9a9c50ad4de5
Status: Downloaded newer image for node:latest
---> 4495f296c63b
Step 2/8 : WORKDIR /usr/src/app
---> Using cache
---> 94f87a509559
Step 3/8 : COPY ./api/package*.json ./
---> Using cache
---> 3c2e8c17ebf5
Step 4/8 : RUN npm install
---> Using cache
---> 90dc7d21af18
Step 5/8 : COPY ./api/ /usr/src/app
---> 5fa3a2b219ef
Step 6/8 : EXPOSE 3000
---> Running in 6ad5fbea1ed8
Removing intermediate container 6ad5fbea1ed8
---> b2f8f2f9129c
Step 7/8 : EXPOSE 3001
---> Running in 2342665c8da3
Removing intermediate container 2342665c8da3
---> 9f1162670b55
Step 8/8 : CMD [ "npm", "start" ]
---> Running in fc9d766bd5c1
Removing intermediate container fc9d766bd5c1
---> a7267b99b3c2
Successfully built a7267b99b3c2
Successfully tagged website_api:latest
非常感谢您的帮助
答案 0 :(得分:0)
使用./models:./models
而不使用$PWD
,应该可以使用。
./models
被解释为相对于Compose文件的位置。
无需提供绝对路径,只需相对路径和docker-compose即可解决。