当我将现有的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
这样的事情可能吗?
答案 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