我有一个docker镜像,它安装了ubuntu和RUN
的一些附加命令,比如安装NodeJS。在docker-compose中运行npm install时出现的问题版本号
Dockerfile(与docker-compose.yml
结合使用)也将目录挂载到主机上的目录。这看起来是这样的:
services:
test:
build:
context: ../../
dockerfile: docker/Dev/Dockerfile
ports:
- 7000:7000
volumes:
- ./../../src:/src
在Dockerfile
我有一个音量以下行:
VOLUME ["/src"]
WORKDIR /src
当我运行docker-compose up
的容器,然后做一个ls -a
的安装src/
文件夹中容器,然后我看到我在主机上看到的所有文件。到现在为止还挺好。
(命令我跑得太往里容器:docker exec -it <container hash> ls -a
)
由于所有的文件似乎在那里,包括package.json
我Dockerfile
我添加了一个新的RUN
命令是:npm install
。所以我有这样的:
VOLUME ["/src"]
WORKDIR /src
RUN npm install
除了给我一个错误,它无法找到在src/
文件夹package.json
。
当我添加一个RUN ls -a
(记住,我切换到src/
文件夹WORKDIR
),那么就说明它是一个空目录...
所以在Dockerfile
我:
VOLUME ["/src"]
WORKDIR /src
# shows that /src is empty. If I do 'RUN pwd', then it shows I really am in /src
RUN ls -a
RUN npm install
但是,在我执行docker-compose up
之后,再次在容器的/src
文件夹中执行ls -a
后,它会再次显示我的所有源文件。
所以我的问题是,为什么他们没有在编译期间(我正在运行docker-compose build
)?
解决此问题的方法是什么?
我再次玩过它。 'COPY'命令可以把我的'package.json'复制到'/ src'文件夹中。然后我可以做一个'RUN npm install',这也可以。它显示它创建了一个'node_modules'文件夹。但是,当我运行'docker-compose up'时,它将覆盖'/ src'目录中的'Dockerfile'的所有内容。我猜这是因为'docker-compose.yml'在同一个'/ src'文件夹中做了'-v',因此覆盖了它以前的所有内容? – Vivendi
对。安装本地目录将使用本地驱动器中的内容替换映像中的任何匹配内容。你通常只想在开发过程中这样做。 – jkinkead