Docker容器不可访问

时间:2019-01-17 09:30:10

标签: node.js docker docker-compose dockerfile

我在Ubuntu 16.04 VM上安装了docker,并且我正在使用nodejs进行个人项目,并且Docker映像来自DockerFile。 容器运行,但是当我尝试使用VP的公共IP访问它时,它是不可访问的。 我试图卷曲,但我卷曲了:(52)来自服务器的空回复。经过很长的时间。 端口已正确映射,也没有防火墙问题。 这是我的码头工人文件

FROM node:10.13-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN apk update && apk upgrade \
        && apk add --no-cache git \
        && apk --no-cache add --virtual builds-deps build-base python \
        && npm install -g nodemon cross-env eslint npm-run-all node-gyp 
           node-pre-gyp && npm install\
        && npm rebuild bcrypt --build-from-source
RUN npm install --production --silent && mv node_modules ../
COPY . .
RUN pwd
EXPOSE 3001
CMD npm start

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             
STATUS              PORTS                    NAMES
8588419b40c4        xxx:v1             "/bin/sh -c 'npm sta…"   2 days ago          
Up 2 days           0.0.0.0:3000->3001/tcp   youthful_roentgen

1 个答案:

答案 0 :(得分:0)

xxx:v1为您提供的Dockerfile构建的图像名称。

如果要通过主机(curl localhost:3001访问应用程序,则应运行:

docker run -p 3001:3000 xxx:v1

此命令将容器中的端口3000绑定到主机上的端口3001(IIRC,3000npm start使用的默认端口)。

随后,您应该可以使用localhost:3001从主机上访问curl

请注意,EXPOSE中的Dockerfile伪指令在运行docker run时不会自动公开端口。只是表明您的容器在EXPOSE d端口上监听。在这里,您的EXPOSE指令是错误的,您应该这样写:

EXPOSE 3000

因为在容器中仅暴露了端口3000 3000npm使用的默认端口)。您选择在主机上绑定(或不绑定)的端口仅在运行时指定。

如果您不想通过localhost来访问应用程序,而只希望通过容器的IP来访问,则无需绑定端口(不需要-p)。您只需要从主机执行curl <container_ip>:3000