Итак, я исследовал эту проблему, проверив, какие порты используются в контейнере:
docker ps
docker exec -it ${docker-id-from-previous-command} netstat -lntup
, и вот результат, который я получил:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:8009 0.0.0.0:* LISTEN 1/java
tcp 0 0 127.0.0.11:37327 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/java
udp 0 0 127.0.0.11:55038 0.0.0.0:*
Итак, я мог видеть этот порт 8009 использовался AJP, но bind-адрес отличался от адреса, используемого портом 8080. Поэтому установка адреса порта на «0.0.0.0» решила мою проблему, но я не могу сказать, что полностью ее понимаю - вот конфигурация с исправлением:
@Configuration
public class TomcatConfiguration implements WebServerFactoryCustomizer<TomcatServletWebServerFactory>
{
@Value( "${tomcat.ajp.secret}" )
String ajpSecret;
@Override
public void customize( TomcatServletWebServerFactory factory )
{
factory.addAdditionalTomcatConnectors( ajpConnector() );
}
private Connector ajpConnector()
{
Connector connector = new Connector( "AJP/1.3" );
AjpNioProtocol protocol = (AjpNioProtocol) connector.getProtocolHandler();
protocol.setSecret( ajpSecret );
connector.setPort( 8009 );
connector.setSecure( true );
try
{
protocol.setAddress( InetAddress.getByName( "0.0.0.0" ) );
}
catch( UnknownHostException e )
{
e.printStackTrace();
}
return connector;
}
}