Heroku使用端口参数运行Docker镜像

时间:2017-05-15 09:32:06

标签: heroku docker dockerfile

当我将现有的Docker镜像推送到Heroku时,Heroku提供了一个$PORT环境变量。如何将此属性传递给Heroku运行实例?

localhost上,这可行:

docker pull swaggerapi/swagger-ui
docker run -p 80:8080 swaggerapi/swagger-ui

On Heroku我应该这样做:

docker run -p $PORT:8080 swaggerapi/swagger-ui

这样的事情可能吗?

2 个答案:

答案 0 :(得分:0)

您的Docker容器需要侦听Heroku指定的端口中的HTTP通信。

查看Github repo for swaggerapi/swagger-ui中的Dockerfile,看起来 好像它已经支持PORT环境变量:https://github.com/swagger-api/swagger-ui/blob/be72c292cae62bcaf743adc6236707962bc60bad/Dockerfile#L13

所以也许您真的不需要做任何事情? 如果以网络应用程序的形式发送到Heroku,则该图像似乎可以正常工作。

答案 1 :(得分:0)

这个问题现在已经很老了,但如果对其他人有帮助,我仍然会在这里写下我的答案。

我有 spring-boot 应用程序和 swagger-ui Dockerized 并部署在 Heroku 上。

这是我的 application.yml 的样子:

server:
  port: ${PORT:8080}
  forward-headers-strategy: framework
  servlet:
   contextPath: /my-app

springdoc:
  swagger-ui:
    path: '/swagger-ui.html'

以下是我的 DockerFile 配置。

FROM maven:3.5-jdk-8 as maven_build
WORKDIR /app

COPY pom.xml .
RUN mvn clean package -Dmaven.main.skip -Dmaven.test.skip && rm -r target

COPY src ./src
RUN mvn package spring-boot:repackage

########run stage########
FROM openjdk:8-jdk-alpine
WORKDIR /app
RUN apk add --no-cache bash


COPY --from=maven_build /app/target/springapp-1.1.1.jar ./

#run the app
# 256m was necessary for me, as I am using free version so Heroku was giving me memory quota limit exception therefore, I restricted the limit to 256m
ENV JAVA_OPTS "-Xmx256m"
ENTRYPOINT  ["java","${JAVA_OPTS}", "-jar","-Dserver.port=${PORT}", "springapp-1.1.1.jar"]

我用来创建 heroku 应用程序的命令:

heroku create
heroku stack:set container

我用来构建镜像和部署的命令:

docker build -t app-image .
heroku container:push web
heroku container:release web

最后确保在 Heroku Dashboard 上的 dyno 信息如下所示:

web java \$\{JAVA_OPTS\} -jar -Dserver.port\=\$\{PORT\} springapp-1.1.1.jar

完成所有这些步骤后,我能够通过

访问swagger-ui

https://testapp.herokuapp.com/my-app/swagger-ui.html