【问题标题】:Exposing docker container ports not working暴露 docker 容器端口不起作用
【发布时间】:2019-02-01 03:55:46
【问题描述】:

我无法将 docker 容器中的端口暴露给我的服务器。 这是我所做的:

我写了一个运行在 8080 端口上的非常简单的 Spring Boot 应用程序。
现在我正在尝试将它部署到我服务器上的 docker 容器中。 根据Spring - Getting started with Docker Userguide,我创建了以下 Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

在第二步中,我将我的 jar 复制到同一目录(存储 dockerfile 的位置)并使用以下命令构建容器:

docker build . -t testportmapping --build-arg JAR_FILE=swagger-v2-person-ws-0.0.1-SNAPSHOT.jar

现在当我跑步时:

docker run -d testportmapping:latest -p 9065:8080

命令运行没有错误。但是如果我看一下:docker container ls:我看到没有创建端口映射:

CONTAINER ID        IMAGE                    COMMAND                  CREATED               STATUS              PORTS                 NAMES
f15639c81903        testportmapping:latest   "java -Djava.securit…"   About 6 minutes ago   Up 6 minutes                              mystifying_payne

有人知道我做错了吗?

到目前为止我已经尝试过:

  1. 使用不同的本地端口
  2. 向 Dockerfile 添加 EXPOSE
  3. --net=host 添加到docker run 命令
  4. 运行附加的容器以查看应用是否正确启动(确实如此)

我的设置:

root@jupiter /h/n/d/p/swagger-v2# docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:24:56 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
  Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:23:21 2018
  OS/Arch:          linux/amd64
  Experimental:     false


root@jupiter /h/n/d/p/swagger-v2# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial

【问题讨论】:

    标签: docker spring-boot port dockerfile


    【解决方案1】:

    运行下面的命令

    docker run -d -p 9065:8080 testportmapping:latest
    

    图像名称应该是最后一个参数,所有其他参数都应该在它之前。

    附: 正如 @David Maze 在 cmets 中提到的,图像名称传递给容器之后的任何内容

    【讨论】:

    • (镜像名称后面的任何内容都被解释为在容器中运行的命令。)
    • 你让我的脸变得如此艰难,并节省了数小时的谷歌搜索时间。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2018-09-03
    • 2020-06-29
    • 2016-07-27
    • 2019-10-24
    • 2019-06-22
    相关资源
    最近更新 更多