运行 docker build 时 EXPOSE 和 CMD 被忽略

aki*_*71s 6 docker

我正在尝试通过运行 docker build 创建一个 docker 映像。以下是我的 Dockerfile 中的代码。

FROM node

WORKDIR /app

COPY . /app

RUN npm install

EXPOSE 80

CMD ["node", "server.js"]
Run Code Online (Sandbox Code Playgroud)

但我只得到了 RUN 命令的日志:

 => [internal] load build definition from Dockerfile                                                                   0.1s 
 => => transferring dockerfile: 128B                                                                                   0.0s 
 => [internal] load .dockerignore                                                                                      0.0s 
 => => transferring context: 2B                                                                                        0.0s 
 => [internal] load metadata for docker.io/library/node:latest                                                         0.0s 
 => [1/4] FROM docker.io/library/node                                                                                  0.0s 
 => [internal] load build context                                                                                      0.1s 
 => => transferring context: 14.62kB                                                                                   0.0s 
 => CACHED [2/4] WORKDIR /app                                                                                          0.0s 
 => [3/4] COPY . /app                                                                                                  0.1s 
 => [4/4] RUN npm install                                                                                              5.0s 
 => exporting to image                                                                                                 0.3s 
 => => exporting layers                                                                                                0.2s 
 => => writing image sha256:b7949d3a83e365d0c55690d4fd5c6d9f0e0e20fe88c53aebc3e33b067e600231                           0.0s
Run Code Online (Sandbox Code Playgroud)

我期望 EXPOSE 和 CMD 以及其他 4 行都可以工作。我应该在哪里检查才能执行此操作?非常感谢你的帮助!

Mar*_*oun 10

EXPOSE并没有真正发布端口(突出显示的是我的):

EXPOSE指令通知 Docker 容器在运行时监听指定的网络端口。您可以指定端口是侦听 TCP 还是 UDP,如果不指定协议,则默认为 TCP。

EXPOSE指令实际上并未发布端口。它充当构建镜像的人和运行容器的人之间的一种文档,关于要发布哪些端口。要在运行容器时实际发布端口,请使用-pon 标志docker run来发布和映射一个或多个端口,或者使用-P标志来发布所有公开的端口并将它们映射到高位端口。

运行容器时,您应该使用该-p选项才能实际发布和映射端口。例如:

docker run [params] -p 8080:9090 image
Run Code Online (Sandbox Code Playgroud)