Grails 內建 Tomcat 預設端口 8080,常與其他服務衝突。本文提供配置檔、啟動參數、環境區隔三種解決方式。
# grails-app/conf/application.yml
server:
port: 8081 # 修改為任意可用端口
# 或針對特定環境
environments:
development:
server:
port: 8081
production:
server:
port: 80
address: 0.0.0.0
# 臨時指定端口啟動
./gradlew bootRun --args='--server.port=9090'
# 或打包後
java -jar myapp.jar --server.port=9090
# Dockerfile
ENV SERVER_PORT=8080
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
# docker run -e SERVER_PORT=9090 -p 9090:9090 myimage
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.setPort(8081);
factory.setContextPath("/myapp");
return factory;
}
}
server.shutdown=customPort (Spring Boot 2.5+) 或 server.tomcat.shutdown-port。server.tomcat.ajp.port 也需區分。management.server.port 獨立管理端口,避免業務端口暴露。# 應用啟動日誌
Tomcat started on port(s): 8081 (http) with context path '/myapp'
# 系統層面確認
netstat -tlnp | grep 8081
ss -tlnp | grep 8081