我有一个在Docker容器中使用React前端的项目。从这个UI中,我将图片(jpg、png文件)上传到位于单独Docker容器中的Node.js后端。从那里,图片被成功保存到共享卷,即React客户端的"public"文件夹。但是,我无法在UI中看到新上传的图片(使用简单的html标记:<img src="/racoon.jpg" />
)。
唯一的方法,我可以看到的图片从用户界面是通过重建整个项目(docker compose build
)。我认为这是因为Docker图像是不可变的。所以一旦新文件被添加,他们不会立即可见。但我需要一个解决方案,将主机的图片在实时。
我不确定我是否需要Docker。也许我可以从Docker启动一个节点服务器。我对Docker很陌生,有什么帮助吗?
我的docker-compose.yml,为了简洁起见省略了一些东西:
x-services-volume: &services-volume
type: bind
source: ./client/public
target: /client/public
services:
server:
build: ./server
container_name: node_server_container
depends_on:
- mysql-db
- redis-cache
environment:
<<: *common-variables
MYSQL_HOST_IP: mysql-db
ports:
- 8000:8000
volumes:
- *services-volume
- ./server:/app
links:
- mysql-db
- redis-cache
command: npm start
client:
build: ./client
container_name: client_container
environment:
<<: *common-variables
NODE_PATH: src
ports:
- 3000:3000
volumes:
- *services-volume
- ./client/src:/app/src
links:
- server
command: npm start
1条答案
按热度按时间2wnc66cl1#
Node.js/Express允许一个公共目录来提供静态文件(https://expressjs.com/en/starter/static-files.html)。我发现这在Docker容器中也是有效的。我为此设置了一个名为“files”的文件夹。
在我的index.js中
我不得不改变我的docker-compose.yml,不再使用共享卷,而是将“files”卷添加到我的服务器容器中。
然后,我简单地修改了服务器端代码,将照片保存到files目录:
然后我看到这样的照片:第一个月