我是当前正在从事next.js项目的Web开发人员(这只是SSR Reactjs的框架)。我正在此项目上使用Docker Config,并且在添加/删除依赖项时发现了一个问题。当我添加依赖关系时,构建我的项目并使用Docker-Compose进行加密时,我的新依赖性并未添加到我的Docker映像中。我必须使用docker system prune
清洁我的Docker系统以重置所有内容,然后我可以建立和建立项目。之后,我的依赖性添加到我的码头容器中。
我使用Dockerfile
配置我的图像和不同的docker-compose
文件,根据我的环境设置不同的配置。这是我的配置:
dockerfile
FROM node:10.13.0-alpine
# SET environment variables
ENV NODE_VERSION 10.13.0
ENV YARN_VERSION 1.12.3
# Install Yarn
RUN apk add --no-cache --virtual .build-deps-yarn curl
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz"
&& tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/
&& ln -snf /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn
&& ln -snf /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg
&& rm yarn-v$YARN_VERSION.tar.gz
&& apk del .build-deps-yarn
# Create app directory
RUN mkdir /website
WORKDIR /website
ADD package*.json /website
# Install app dependencies
RUN yarn install
# Build source files
COPY . /website/
RUN yarn run build
docker-compose.yml(dev env)
version: "3"
services:
app:
container_name: website
build:
context: .
ports:
- "3000:3000"
- "3332:3332"
- "9229:9229"
volumes:
- /website/node_modules/
- .:/website
command: yarn run dev 0.0.0.0 3000
environment:
SERVER_URL: https://XXXXXXX.com
在这里我的命令运行我的Docker环境:
docker-compose build-no-cache
docker-compose
我想我的码头配置中有什么问题,但我无法抓住它。你有帮助我的想法吗?
谢谢!
现在,您的卷未设置为您打算做的事情。下面的当前集合意味着您使用本地.
目录在容器中覆盖website
目录的内容。
volumes:
- /website/node_modules/
- .:/website
我确定您的目的是首先将您的本地目录映射到容器中,然后用图像的Node_modules目录的原始内容覆盖node_modules
,即/website/node_modules/
。
更改卷的顺序如下,应解决问题。
volumes:
- .:/website
- /website/node_modules/
您明确地告诉Docker您想要此行为。当您说:
volumes:
- /website/node_modules/
您正在告诉Docker,您不想使用烤入图像中的node_modules
目录。相反,它应该创建一个匿名卷来保存node_modules
目录(在其首次使用时具有某些特殊行为),并将数据持续存在,即使其他特征(例如基础图像更改)也是如此。
这意味着,如果您更改package.json
并重建图像,Docker将继续使用node_modules
目录的音量版本。(类似地,.:/website
的绑定安装意味着您的Dockerfile的后半部分中的其他所有内容基本上都被忽略了。)
我将删除此设置中的volumes:
块,以尊重图像中构建的程序。(我还建议将command:
移至Dockerfile
中的CMD
行。)开发和测试您的应用程序而不使用Docker,并在基本上工作后构建和部署并部署并部署。