docker 如何使一个停靠容器与本地堆栈停靠容器通过停靠合成进行通信?

ubby3x7f  于 2022-11-03  发布在  Docker
关注(0)|答案(2)|浏览(213)

我正在Docker容器内设置一个应用程序。我希望此应用程序能够连接到localstack堆栈容器localstack docs。当我运行docker-compose up时,容器成功启动。我可以运行一个单独的java应用程序,该应用程序不包含在Docker-compose文件中,它将成功连接到localstack容器。但与localstack沿着启动的应用程序无法连接。我看过docker文档和localstack文档,我不知道如何让这些东西相互交流。任何帮助都将非常感谢。下面是我的docker-compose文件:

version: '3.4'

networks:
  default:
    driver: bridge

services:
  jc:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
      - PORT=5001
      network: host
    image: jc
    depends_on:
    - localstack
    container_name: jc
    ports:
    - 5001:5001
    links:
    - localstack
    environment:
    - SPRING_PROFILES_ACTIVE=local
  localstack:
    image: localstack/localstack
    ports:
    - "4567-4584:4567-4584"

我收到的错误消息是:
应用程序=jc版本=2.0.1.0:轮询消息时发生异常:无法执行HTTP请求:连接到本地主机:4576 [localhost/127.0.0.1]失败:连接被拒绝(连接被拒绝)

kokeuurv

kokeuurv1#

关于此错误
连接到本地主机:4576 [localhost/127.0.0.1]失败:连接被拒绝(连接被拒绝)
看起来你已经在服务jc中准备好了设置,你需要为你的问题应用程序准备相同的设置。

links:
- localstack

我猜你的应用程序也在另一个Docker中运行,而不是直接在主机上运行。所以你不能从应用程序容器访问localhost:4567,因为这些aws模拟的服务在容器本身中是不可访问的。
1.链接这localstack容器到你的应用程序.例如如果这链接名称是localstack,那么你可以访问服务与localstack:4567
1.获取主机的真实的IP地址,使用IP:4567访问

isr3a4wc

isr3a4wc2#

LocalStack给了我们最初的配置困难。我们使用docker-compose在本地运行它,使用服务在GitLab上运行它。我们将它用于S3服务

localstack:
    container_name: "localstack"
    image: localstack/localstack:1.2.0
    ports:
      - "4566:4566"
    environment:
      - DOCKER_HOST=unix:///var/run/docker.sock

现在,这将在Spring Bean中读取,对于连接,我们在url中使用http://localstack:4566。http://localhost:4566在容器内工作,在容器外必须是http://localstack:4566

@Bean
  AmazonS3 amazonS3Client() {
    var endpoint = new AwsClientBuilder.EndpointConfiguration("http://localstack:4566", s3ConfigProperties.getRegion());
    return AmazonS3ClientBuilder.standard().withEndpointConfiguration(endpoint).enablePathStyleAccess().build();
  }

对于GitLab部署,我们在服务中使用以下配置

services:
- name: localstack/localstack:1.2.0
      alias: localstack
      command: [ "--port","4566","--expose", "4566" ]

作为在Docker容器内运行的功能测试,S3配置URL需要为http://localhost:4566

相关问题