我有两个简单的端点:

在端口8080上

@SpringBootApplication
@RestController
public class LogonPageApplication {
private static final String PROCESS_STRING_URL = "http://localhost:8081/processString";

    public static void main(String[] args) {
        SpringApplication.run(LogonPageApplication.class, args);
    }
    
    @GetMapping("/send")
    public String test() {
        String responseBody = "";
        try {
            RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers 
            = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);
            String requestBody = "{fromlogon}";
            HttpEntity<String> httpEntity = new HttpEntity<>(requestBody, headers);
    
            ResponseEntity<String> response =
            restTemplate.exchange(PROCESS_STRING_URL, HttpMethod.POST, httpEntity, String.class);
    
            responseBody = response.getBody();
        } catch (Exception e) {
            return e.getMessage();
        }
            return "Main Page\n" + "Response from /processString: " + responseBody;
        }

}

在端口8081上:

@SpringBootApplication
@RestController
public class AcceptMessageApplication {

    public static void main(String\[\] args) {
        SpringApplication.run(AcceptMessageApplication.class, args);
    }

    @GetMapping("/test")
    public String testt() {
        return "Accept-message-Page";
    }

    @PostMapping("/processString")
    public String processString(@RequestBody String inputString) {
        return "Processed string: " + inputString;
    }

}

我还有两个Docker文件:

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/LogonPage-0.0.1-SNAPSHOT.jar /app/LogonPageApplication.jar
EXPOSE 8080
CMD ["java", "-jar", "LogonPageApplication.jar"]

它们之间唯一的区别是Jarfile名称--一个是Logon,另一个是AcceptMessage

因此,我使用以下命令运行我的应用程序:

docker network create my_network
docker build -t logon-page-app .
docker run -d -p 8080:8080 --network my_network --name logon-page-container logon-page-app
docker build -t accept-page-app .
docker run -d -p 8081:8080 --network my_network --name accept-page-container accept-page-app

虽然这款应用在控制台上运行并通过postman 发送请求时运行得很好,但每当我进入http://localhost:8080/send.时,我都无法让他们交换消息,因为我将其停靠在Docker上

推荐答案

正如人们在 comments 中提到的,这不是Java的问题,而是与Dockers的联网问题.

我没有Java项目自动取款机的例子,但这个应该也能用.

因此,这里有用于设置Magento服务docker-compose.yml文件

version: '3.0'
services:
  web:
    image: alexcheng/magento2
    ports:
      - "7082:80"
    links:
      - db
    volumes: 
      - magento-data:/var/www/html  
    environment:
      - MAGENTO_LANGUAGE=en_GB
      - MAGENTO_TIMEZONE=Pacific/Auckland
      - MAGENTO_DEFAULT_CURRENCY=NZD
      - MAGENTO_URL=http://local.magento
      - MAGENTO_BACKEND_FRONTNAME=admin
      - MAGENTO_USE_SECURE=0
      - MAGENTO_BASE_URL_SECURE=0
      - MAGENTO_USE_SECURE_ADMIN=0

      - MAGENTO_ADMIN_FIRSTNAME=Admin
      - MAGENTO_ADMIN_LASTNAME=MyStore
      - MAGENTO_ADMIN_EMAIL=amdin@example.com
      - MAGENTO_ADMIN_USERNAME=admin
      - MAGENTO_ADMIN_PASSWORD=admin
  db:
    image: mysql:5.6.23
    volumes:
      - db-data:/var/lib/mysql/data
    environment:
      - MYSQL_HOST=db
      - MYSQL_ROOT_PASSWORD=myrootpassword
      - MYSQL_USER=magento
      - MYSQL_PASSWORD=magento
      - MYSQL_DATABASE=magento
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8580:80"
    links:
      - db     
volumes:
  magento-data:
  db-data: % 

如您所见,这里有两个容器,一个名为"web",它本身就是Magento,第二个名为"db",表示数据库.

现在,当我运行这个docker-compose并转到localhost:7082时,我将看到一个配置屏幕,我需要在其中放置数据库服务器主机.如果它不是停靠容器,我会在那里放入"localhost",但由于它是停靠容器,您需要在那里放入数据库容器的名称,因此"db"如下所示:

enter image description here

顺便说一句.这个docker编写的文件(如果有人想要运行它)是在mac os上测试的,所以我可能需要一些调整才能在其他系统上运行.

根据您的操作系统,只需使用命令"sudo docker-compose up-d"或"docker-compose up-d"即可运行它

要清除图像,请使用以下命令: 数道 docker -作曲-删除-孤儿 数道扩展坞体积rm$(sudo扩展坞体积ls-q|grep Magento)

Java相关问答推荐

PDFBox SmallMap不尊重Map.入口哈希码合同

在Java中将扩展的Ascii(127)转换为标准Ascii(128)

使用Java使用fabric.io获取当前部署名称

如何在Spring Security中设置CustomLogin路径?

更新我们的一个文物后出现了严重的符号引用错误

如何审查Java dtos中的自定义注释字段?

Java JAR环境(JRE)是否支持模块?

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

ittext pdf延迟签名,签名无效

Hibernate 6支持Joda DateTime吗?

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

什么是Java原子属性的正确getter和setter

按属性值从流中筛选出重复项

如何使用Jackson将XML元素与值和属性一起封装

用OSQL创建索引

垃圾回收器是否真的删除超出作用域的对象?

从字节数组切换到JakartaMail org.springframework.mail.javamail.JavaMailSender InputStreamResource

Java中的一个错误';s stdlib SocksSocketImpl?

如何正确使用java.time类?

try 添加;按流派搜索;在Web应用程序上,但没有;I don’我不知道;It’这个代码错了