【发布时间】:2020-10-03 12:38:21
【问题描述】:
我正在尝试使用 Nodejs 服务器对 Reactjs 应用程序进行 dockerize。在许多示例中,我们必须在 Dockerfile 中安装依赖项,但我想在容器以脚本启动后执行此操作。 有可能吗?
我的 docker-compose 文件:
version: '3.7'
services:
web-server:
container_name: webserver
build:
context: ./docker/web-server
dockerfile: ./Dockerfile
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
working_dir: /usr/src/app
我的 Dockerfile:
FROM node:alpine
COPY scripts/docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 3000
我的 docker-entrypoint.sh:
#!/bin/sh
[ ! -d "node_modules" ] && npm install
ls -la
npm start
容器日志:
total 644
drwxrwxr-x 8 node node 4096 Oct 3 12:19 .
drwxr-xr-x 3 root root 4096 Oct 3 12:19 ..
-rw-rw-r-- 1 node node 0 Oct 3 12:16 .dockerignore
drwxrwxr-x 8 node node 4096 Oct 2 23:57 .git
-rw-rw-r-- 1 node node 317 Oct 2 22:23 .gitignore
drwxrwxr-x 4 node node 4096 Oct 3 12:52 .idea
-rw-rw-r-- 1 node node 2891 Oct 2 20:22 README.md
drwxrwxr-x 3 node node 4096 Oct 2 23:57 docker
-rw-rw-r-- 1 node node 325 Oct 2 23:52 docker-compose.yml
drwxr-xr-x 1020 node node 36864 Oct 3 12:19 node_modules
-rw-rw-r-- 1 node node 577492 Oct 2 20:23 package-lock.json
-rw-rw-r-- 1 node node 748 Oct 2 20:23 package.json
drwxrwxr-x 2 node node 4096 Oct 2 20:22 public
drwxrwxr-x 2 node node 4096 Oct 2 23:04 src
> docker-react@0.1.0 start /usr/src/app
> react-scripts start
ℹ 「wds」: Project is running at http://172.19.0.2/
ℹ 「wds」: webpack output is served from
ℹ 「wds」: Content not from webpack is served from /usr/src/app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...
我想这样做以保持与我在另一个项目中的 Symfony API 相同的安装逻辑。但我的例子不起作用。
更新 1:现在我正在尝试将我的项目构建成映像,但运行后仍然无法正常工作 docker-compose up -d --build
Dockerfile:
FROM node:alpine
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml:
version: '3.7'
services:
web-server:
container_name: webserver
build:
context: .
dockerfile: ./docker/web-server/Dockerfile
ports:
- "3000:3000"
【问题讨论】:
-
如果主机绑定挂载已经有一个
node_modules目录(尝试在npm install命令之前放置另一个ls以查看),您将获得此行为。一般的 Docker 最佳实践是删除volumes:以使用内置到映像中的代码;您可以使用主机节点在前端工作(如果您想这样做,则每次都使用rm -rf node_modules; npm install; npm run start)。 -
我尝试在没有脚本的情况下将项目构建为图像,但它仍然无法正常工作。看看我在主帖上的更新 1。
-
怎么不工作?
-
我去
localhost:3000时什么都没有。该网站无法访问...
标签: node.js reactjs docker docker-compose