小编med*_*ech的帖子

Docker 无法连接到容器暴露的端口

设想:

嘿,我正在运行一个带有容器的 docker compose。这个 compose 文件在 Windows 10 上的 ma 本地 docker 桌面上就像魅力一样。我用网络配置了我自己的网络driver bridge. 现在我想在带有 ubuntu vm 的外部服务器上运行 docker compose。我有到服务器的远程腻子连接。当我运行docker-compose up我所有的服务成功启动。我还运行了 portainer 以对此进行 gui 控制。

问题: Lika 我说过,我所有的服务都在运行。与我的本地设置的唯一区别是我将 portainer 作为单个容器启动。我无法使用浏览器连接到 portainer 并检查整个设置。但是当我想调用我的公开容器时,我无法获得连接并出现连接失败错误。当我查看容器规范中 portainer 中的 IP 地址列时,我发现 portainer 的 IP 与我的 docker compose 容器不同。所以 portainer 有 172.17.xxx 并且所有其他容器都以 172.20.xxx 开头,显然我的专用网络中暴露的端口没有暴露给主机桥接网络。

我希望 我的公开端口可以通过我的虚拟机的 ip 使用,例如我的 portainer 实例。

想法 我对 docker 很陌生,所以我检查了文档,我认为是因为描述:

在用户定义的桥接网络中,不支持链接。您可以在此网络中的容器上公开和发布容器端口。如果您想让桥接网络的一部分可供外部网络使用,这将非常有用。

..作为网络驱动程序的网桥将我的网络连接到本地主机互联网连接。

问题: 当我从我的 compose 中运行 portainer 时有什么问题吗?当我在外部服务器上而不是在我的本地主机上运行我的撰写时,还有什么需要记住的吗?

撰写网络配置文件:

networks:
  my_net:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

我的撰写版本是 2.1

更新: …

networking containers docker docker-compose

11
推荐指数
3
解决办法
3万
查看次数

如何在 Docker Compose 中初始化 MySql 数据库

场景: 我在 Spring 中开发了一个使用 mysql 8 数据库的微服务。这个数据库必须被初始化(创建一个数据库,一些表和数据)。在我的主机上,我使用 data.sql 和 schema.sql 脚本初始化了数据库。问题是,我必须设置:

spring.datasource.initialization-mode=always
Run Code Online (Sandbox Code Playgroud)

对于第一次执行。这以我想要的方式初始化我的数据库。对于未来的运行,我必须评论这个命令。非常难看的解决方案,但我找不到更好的解决方案,而且我现在对这个问题没有任何回应。我认为测试它是可以的,但我肯定必须改进它。目前我想通过 docker compose 使用 docker 运行我的服务。

预期: 这是 docker-compose 文件。相当简单。我对 docker 世界完全陌生,所以我想一步一步地继续。

version: '3' 
services:usermanagement-service:
build:
  ./UserManagementService
restart:
  on-failure
ports:
  - "7778:7778"
links:
  - mysqldb
depends_on:
  - mysqldb   mysqldb:
build:
  ./CustomMySql
volumes:
  - ./mysql-data:/var/lib/mysql
restart:
  on-failure
environment:
  MYSQL_ROOT_PASSWORD: root
  MYSQL_DATABASE: userdb
  MYSQL_USER: testuser
  MYSQL_PASSWORD: testuser
expose:
  - "3600"
Run Code Online (Sandbox Code Playgroud)

我期待,我的数据库被一个用户初始化,并且在第一次运行时我的微服务用数据初始化数据库。因此,在下次开始撰写之前,我必须注释该命令并重建映像。(我知道,丑)

问题: 所以除了这个丑陋的解决方案之外,我还遇到了运行时问题。在docker-compose up我的微服务上比数据库的 init 快。所以它试图调用导致错误的数据库。因为restart on failure微服务又出现了。现在它可以工作了,因为 db 的 init 已经完成。

解决方案: 我搜索了 …

mysql init docker spring-boot docker-compose

7
推荐指数
1
解决办法
1万
查看次数

Python在Windows 10上使用gattlib进行BLE扫描

嗨,我是python的入门者,我想在我的笔记本电脑(Windows 10)和将成为Master的BLE设备之间创建BLE连接。我安装了Bluez,可以检测到Bluetooth设备(例如智能手机),但没有检测到仅支持BLE的设备。我想下载gattlib,pip install gattlib但是得到OSError: Not supportet OS的结论是,我不能在Windows 10上以这种方式这样做。那么,除了在笔记本电脑上安装Linux之外,还有其他可能性吗?感谢大伙们

python bluetooth-lowenergy windows-10

6
推荐指数
1
解决办法
1471
查看次数

Spring WebClient 在标头中设置不记名身份验证令牌

以下场景:

我有两个微服务 A 和 B。服务 A 是一个承载客户端,它有一个开放的 api 并接收来自必须由 keycloak 授权的客户端的请求。现在我想从服务 A 向服务 B 发送一个授权请求,它也是一个承载客户端。

我想过在 webclient builder 过程中将功能添加为过滤器功能,例如

    @Bean
    WebClient webClient() {
        return WebClient.builder()
                .filter(authHeader())
                .build();
    }

    private ExchangeFilterFunction authHeader(String token) {
        return (request, next) -> next.exchange(ClientRequest.from(request).headers((headers) -> {
            headers.setBearerAuth(token);
        }).build());
    }
Run Code Online (Sandbox Code Playgroud)

这是我在另一个问题中找到的一个例子。这对我来说似乎是正确的方法,但我可以在配置的那个阶段提供“字符串令牌”参数吗?我只是从 RestTemplate 切换到 Webclient,很抱歉,这是一个转储问题。

编辑:我可以在构建新的 Webclient 时手动设置标题。

return WebClient.builder().defaultHeader("Authorization", "Bearer "+ context.getTokenString()).build();
Run Code Online (Sandbox Code Playgroud)

正如我从 RestTemplate 知道的,它可以用作单例。还有一个 KeyCloakRestTemplate 会自动注入标头。

Webclient 是不可变的,所以当我注入它时,我不能只使用它并在之后添加标头。此外,我无法在启动时设置此标头,因为我必须等待获取承载标头并将其传入的请求。所以我想除了这样做之外没有其他方法吗?

webclient oauth spring-webclient

6
推荐指数
2
解决办法
1892
查看次数

Pydantic:如何通过具有别名字段名称的字典来初始化模型?

我有一个模型:

class Cars(BaseModel):
 numberOfCars: int = Field(0,alias='Number of cars')
Run Code Online (Sandbox Code Playgroud)

我有一个字典:

{
"Number of cars":3
}
Run Code Online (Sandbox Code Playgroud)

如何使用此模型创建 Cars 实例?使用此模型时是否有类似“by_alias”的内容?

python-3.x pydantic

5
推荐指数
1
解决办法
5582
查看次数

运行 Eureka Server 时无法启动嵌入式 Tomcat

我刚开始使用微服务,我想创建一个简单的 Eureka 服务器来执行我的 Serviceregistry。现在我只想在本地主机上运行服务器,稍后我想添加一个注册到它的示例微服务。问题是我在尝试启动 Eureka Server 时遇到错误。我在 Eclipse 中使用 Spring 和 Maven 在 ubuntu vm 中进行开发。

我的 POM.xml 如下所示:

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.example.cloud</groupId>
<artifactId>eureka-service-new</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>eureka-service-new</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Edgware.SR2</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
     <dependency> 
             <groupId>org.springframework.cloud</groupId> 
             <artifactId>spring-cloud-starter-eureka-server</artifactId> 
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId> …
Run Code Online (Sandbox Code Playgroud)

eclipse tomcat maven spring-boot netflix-eureka

1
推荐指数
1
解决办法
6109
查看次数

当我想要以毫秒为单位的Unix时间时,Mongodb Timestamp输出格式返回“ $ numberLong”对象

我开发了一个Spring应用程序,该应用程序将JSON保存在MongoDb中。客户端可以输入时间间隔开始和结束来搜索数据。为了能够使用正则表达式(lte和gte)从数据库中获取数据,我将Time保存为UnixTimeStamp:

 "TimeStamp": {
                "StartTime": 1549371540000,
                "EndTime" : 1549371540000,
                "StartTimeZone":"Europe/Berlin",
                "EndTimeZone":"Europe/Berlin"
            }
Run Code Online (Sandbox Code Playgroud)

过滤有效,但结果如下:

"TimeStamp": {
                    "StartTimeZone": "Europe/Berlin",
                    "EndTimeZone": "Europe/Berlin",
                    "EndTime": {
                        "$numberLong": "1549371540000"
                    },
                    "StartTime": {
                        "$numberLong": "1549371540000"
                    }
                }
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用$ numberLong键获取键值对而不是StartTime对象?我也在考虑使用yyyy_mm_ddTHH:MM:SS + -Offset节省aso Iso格式的时间

但是据我所知,我只能用正则表达式来过滤这种格式的时间。处理时间是项目的重要组成部分,我想确保以最佳实践方式对待这一部分。

编辑:在我的代码我

for (Document doc : collection.find(query).projection(Projections.include(projectionList))) {
            //Save the query result as a List of JSON-Objects
            dataList.add(doc.toJson());
        }
Run Code Online (Sandbox Code Playgroud)

将结果另存为json列表。我知道不赞成使用toJson方法,但无法找到一种将文档转换为JSON表示法的方法。

java format time json mongodb

1
推荐指数
1
解决办法
83
查看次数