运行docker-compose up --build
之后,无法访问运行我的React客户端的容器。以下是输出的日志:
client_1 | ℹ 「wds」: Project is running at http://172.18.0.4/
client_1 | ℹ 「wds」: webpack output is served from
client_1 | ℹ 「wds」: Content not from webpack is served from /app/public
client_1 | ℹ 「wds」: 404s will fallback to /
client_1 | Starting the development server...
奇怪的是,显示上述内容后,我的终端向我显示了我的React代码中的警告和错误。当我尝试在浏览器中访问IP地址http://172.18.0.4/
时,它根本无法加载。我已经尝试过localhost:3000
,它是Reacts的默认端口,没有任何作用。
我已经尝试通过运行docker-run -it container-id sh
来查看实际的容器,并且客户端运行所需的所有文件都已存在。我不太确定怎么了。任何帮助将不胜感激!下面是我的开发Dockerfile和Docker Compose文件。
docker-compose.yml
version: '3'
services:
postgres:
image: 'postgres:latest'
environment:
- POSTGRES_PASSWORD=postgres_password
api:
build:
dockerfile: Dockerfile.dev
context: ./server
# To have a reference to local file system
volumes:
- /app/node_modules
- ./server:/app
environment:
- PGUSER=postgres
- PGHOST=postgres
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=postgres_password
- PGPORT=5432
depends_on:
- postgres
client:
stdin_open: true
build:
dockerfile: Dockerfile.dev
context: ./client
volumes:
- /app/node_modules
- ./client:/app
rtmpserver:
build:
dockerfile: Dockerfile.dev
context: ./rtmpserver
volumes:
- /app/node_modules
- ./rtmpserver:/app
Dockerfile.dev
FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm","run", "start"]
编辑:
我已经运行了以下命令docker run -p 3000:3000 -v /app/node_modules -v "$(pwd):/app" container-id
,并得到了以下结果。
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
这没有任何意义,因为所有文件都在容器中。
答案 0 :(得分:0)
您不能使用容器IP(http://172.18.0.4/)从外部docker网络访问您的服务。您需要在Docker文件中公开端口,然后使用localhost:3000进行访问。
b
在docker-compose.yml中添加端口映射
FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm","run", "start"]