标签: docker-network

MongoDB Docker容器:错误:无法将pid文件写入/tmp/tmp.aLmNg7ilAm:设备上没有剩余空间

我像这样启动了一个MongoDB容器:

docker run -d -p 27017:27017 --net=cdt-net --name cdt-mongo mongo
Run Code Online (Sandbox Code Playgroud)

我看到我的MongoDB容器已退出:

0e35cf68a29c        mongo               "docker-entrypoint.s…"   Less than a second ago   Exited (1) 3 seconds ago                       cdt-mongo
Run Code Online (Sandbox Code Playgroud)

我检查了Docker日志,我看到:

$ docker logs 0e35cf68a29c
about to fork child process, waiting until server is ready for connections.
forked process: 21
2018-01-12T23:42:03.413+0000 I CONTROL  [main] ***** SERVER RESTARTED *****
2018-01-12T23:42:03.417+0000 I CONTROL  [main] ERROR: Cannot write pid file to /tmp/tmp.aLmNg7ilAm: No space left on device
ERROR: child process failed, exited with error number 1
Run Code Online (Sandbox Code Playgroud)

有谁知道这个错误是什么?容器中没有足够的空间?

mongodb docker docker-networking docker-container docker-network

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

无法在本地主机上的 docker 容器之间进行通信

首先,我是 docker 容器的新手,我不太了解它们是如何运行的,但我有这样的设置:

  • 一个用于 .NET Core API 的 Docker 容器(由 VS-2019 自动生成的 Docker 文件)
  • 用于 Angular 9 应用程序的一个 Docker 容器

该 API 可通过https://localhost:44384/api/weatherforecast 访问 容器化角度应用程序可通过https://localhost:4200访问

如果我在没有 docker 的情况下运行 Angular 应用程序,则在使用代理修复 CORS 问题后,我可以连接到https://localhost:44384/api/weatherforecast。但是,当我运行 dockerized 版本时,我收到以下错误:

Failed to load resource: the server responded with a status of 504 (Gateway Timeout)
Run Code Online (Sandbox Code Playgroud)

在 VS 控制台中我看到以下错误:

clearance_1  | [HPM] Error occurred while trying to proxy request /api/weatherforecast from loccoalhost:4200 to https://localhost:44384 (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)
Run Code Online (Sandbox Code Playgroud)

这似乎是一个连接问题,所以我在互联网上进行了一些挖掘,并尝试将这两个容器置于同一网络下。

步骤如下: 1. 创建桥接“测试”网络

docker network create test …
Run Code Online (Sandbox Code Playgroud)

core-api docker docker-compose angular docker-network

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

docker 中有关用户指定子网的错误消息

我正在尝试使用该标志为容器指定 IP --ip。但我收到以下消息:

Error response from daemon: user specified IP address is supported only when connecting to networks with user configured subnets.

这个消息是什么意思?如何让容器运行?

网络是使用以下命令创建的: docker network create my_network_name

容器的调用方式为: docker run -it --net my_network_name --ip 172.22.0.30 image_name

docker docker-network

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

无法从 Python Docker 连接到 mqtt Docker

所以我有一个正在运行的 toke/mosquitto docker 容器,我可以从外部 docker 连接到它。

然后我使用 Python docker 容器将数据发布到我的 mosquitto 代理。这是我的代码:

import paho.mqtt.client as paho
import time
import random

broker = "localhost"
port = 1883


def on_publish(client, userdata, result):
    print("Device 1 : Data published.")
    pass

client = paho.Client("admin")
client.on_publish = on_publish
client.connect(broker, port)

for i in range(20):
    d = random.randint(1, 5)

    # telemetry to send
    message = "Device 1 : Data " + str(i)
    time.sleep(d)

    # publish message
    ret = client.publish("/data", message)

print("Stopped...")
Run Code Online (Sandbox Code Playgroud)

该代码尝试连接到未在 docker 中运行的 mqtt 代理。

但我不知道如何让两者都与 …

mqtt docker mosquitto docker-compose docker-network

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

如何识别执行请求的客户端应用程序

我编写了一个可供多个客户端应用程序使用的 Java (Spring-Boot) 服务。对于维护/统计,我想记录哪些应用程序访问该服务。在不信任客户端的情况下如何识别客户端应用程序?

附加信息

  • 其中多个客户端应用程序位于反向代理 ( traefik ) 后面的 docker 容器中。
  • 其中多个客户端应用程序是由同一个人编写/维护的。这是相关的,因为客户端应用程序使用的请求代码可以重新用于另一个应用程序,而无需更改客户端 ID。
  • 我只是想阻止人们复制请求代码,因为它更快。在我看来,这个解决方案不安全,也不一定安全。认识到两个应用程序使用相同的标识符就足够了。

方法

这个想法可能是使用公钥身份验证并将私钥绑定到协议/IP/端口组合之类的东西。第一部分(公钥验证)将帮助对良好维护/统计感兴趣的客户。第二部分(绑定)在我眼中是一个死胡同,因为我不知道我可以用什么来绑定:

  • 协议:几乎总是相同的。
  • IP:由于 docker 主机很少,通常是相同的。
  • 端口:我现在不确定,我猜客户端请求是随机的。
  • Mac:网段不可预测。

有任何想法吗?

java docker spring-boot traefik docker-network

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

使用 Mongoose 连接 docker 环境中的 MongoCryptD 实例

我在网上搜索过但无法在任何地方找到答案。我正在尝试使用 NestJS 框架运行 API Web 服务。

我正在运行 docker-compose,它会启动 API 服务器、MongoDB 实例和 mongocryptd 实例,以允许在我的应用程序上进行客户端字段级加密。

我能够连接到 MongoDB 实例,但无法连接到 mongocryptd 实例。

Docker-Compose 文件:

version: "3.7"
services:
  api:
    build:
      context: .
      dockerfile: Dockerfile
      labels:
        env: dev
      args:
        APP: appname
        APP_PORT: 3000
    ports:
      - "3000:3000"
    command: ["sh", "-c", "npm run start:app:dev"]
    volumes:
      - .:/app

  mongodb:
    build:
      context: .
      dockerfile: docker/MongoEP-Dockerfile
      labels:
        env: dev
      args:
        MONGO_PACKAGE: mongodb-enterprise
        MONGO_REPO: repo.mongodb.com
    image: mongo-enterprise:4.2.5
    command: ["--auth"]
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: usr
      MONGO_INITDB_ROOT_PASSWORD: pwd
    ports:
      - "27017:27017"
    volumes: ["/private/var/services/mongodb:/data/db"]

  mongocryptd: …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb docker docker-compose docker-network

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

从一个容器到另一个容器进行 API 调用

我有一个节点应用程序、一个用于前端的 next.js 应用程序、Redis 和 Postgres 作为数据库。我已经在不同的容器中对 Next.js 和 node.js 进行了 Docker 化。Docker-compose.yaml如下

version: '3'
services: 
  redis-server:
    image: 'redis'
    restart: always
  postgres-server:
    image: 'postgres:latest'
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
    ports: 
      - "5433:5432"
    volumes:
        - ./docker/postgres/data/data/pg_hba.conf:/var/lib/postgresql/app_data/pg_hba.conf
        - ./src/db/sql/CREATE_TABLES.sql:/docker-entrypoint-initdb.d/CREATE_TABLES.sql
        - ./src/db/sql/INSERT_TO_TABLES.sql:/docker-entrypoint-initdb.d/INSERT_TO_TABLES.sql
        - ./src/db/sql/CREATE_FUNCTIONS.sql:/docker-entrypoint-initdb.d/CREATE_FUNCTIONS.sql
  node-app:
    build: .
    ports: 
      - "4200:4200" 
  client:
    build:
      context: ./client
      dockerfile: Dockerfile
    container_name: client
    restart: always
    volumes:
      - ./:/app
      - /app/node_modules
      - /app/.next
    ports:
      - 3000:3000
Run Code Online (Sandbox Code Playgroud)

使用 SSR 时,我无法向 localhost:4200 发出请求。现在,我知道这是因为它们位于不同的容器中,如果请求不是来自客户端,则将在端口 4200 处检查客户端容器的服务器。现在,我不知道如何简单地使用容器名称或其他内容来引用容器来对 SSR 数据发出 API 请求(例如fetch('node-app/users') …

docker-compose server-side-rendering next.js docker-network

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

Nginx 代理管理器无法从另一个 docker 容器提供页面

我正在尝试让 nginx 代理管理器(在 docker 容器中运行)连接到另一个打开了端口 8080 的 docker 容器。当我设置代理连接到192.168.0.29:8080主机的IP地址,但它不起作用时,浏览器只是说该站点没有发送任何数据。

我尝试使用其他服务(不在 docker 容器内运行)设置反向代理,它们工作完美。所以,我得出的结论是,问题出在 docker 容器上。

首先,我尝试用容器的地址(显示在 portainer 中)替换 ip 地址,该地址显示为172.17.0.2. 但是,那没有用。我可以确认两个容器都在同一个网络中bridge

我在这里、Stack Overflow 或其他地方都找不到这个问题的任何解决方案。希望有足够的数据来解决这个问题。提前致谢!

编辑:arp -na从容器内 运行会给出以下输出:

[root@docker-00244f7ab2cc:/app]# arp -na
? (172.17.0.1) at 02:42:d1:fc:fc:6b [ether] on eth0
Run Code Online (Sandbox Code Playgroud)

docker docker-container docker-network nginx-reverse-proxy

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

创建网关时(例如使用 Compose 文件时)Docker 可以使用哪些 IP 地址范围

我有一个天真的问题,但我注意到通过使用一些 Compose 文件,docker 以表单172.x.0.1为我的项目的所有网络创建网关地址。x通常总是(?)递增(除非重新启动docker服务),从18开始(因为默认桥接网络使用17)直到......一些我在文档中无法弄清楚的数字。之后,docker 跳转到 形式的网关192.168.y.1,在这里,我再次无法弄清楚ydocker 可以使用哪些值范围,以及它在所有这些范围中选择网关地址的策略是什么。

我的强烈印象是它只选择私有IP地址。但我还没有看到诸如 之类的地址10.a.b.c

任何人都可以向我解释一下,最好有一些官方资源,docker 在创建桥接网络时实际上如何选择网关地址(特别是在 Compose 文件的情况下),docker 可用的所有地址池是什么(以及是否可以手动定义或限制这些范围)?

我查阅的一些页面没有取得太大成功:
https://docs.docker.com/network/
https://docs.docker.com/network/bridge/
https://docs.docker.com/network/network-教程独立/
https://docs.docker.com/compose/networking/ https://github.com/compose-spec/compose-spec/blob/master/spec.md

docker docker-compose docker-network

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

如何使用 docker ipvlan 网络转发/重定向端口

问题:如何使用 docker 的 ipvlan 网络将转发端口 80 重定向到同一特定 IP 地址上的端口 8080?

情况:我通过发出命令创建了一个 docker 网络

docker network create -d ipvlan --subnet=192.168.0.1/22 --gateway=192.168.0.1 \
-o ipvlan_mode=l2 -o parent=enp8s0 my_network
Run Code Online (Sandbox Code Playgroud)

我的接口enp8s0位于同一子网、同一网关上。

然后,我8080通过发出以下命令创建了一个 docker 容器,该容器具有公开 port 的服务:

docker run --detach --restart=unless-stopped \
--network=my_network \
--ip=192.168.2.10 \
--hostname my_service \
--name my_service \
-p 8080:8080 \
-p 80:8080 \
my_service:latest
Run Code Online (Sandbox Code Playgroud)

我可以成功访问 上的服务http://192.168.2.10:8080

问题:我无法访问端口 上的服务80。端口8080工作正常。在这种情况下,更改内部服务配置对我来说是不切实际的,因为我需要两个端口808080具有连接性,这将需要大量代码重写(并且我还有其他服务需要对不同端口进行相同的转发) 。

我尝试在主机上通过发出命令来使用 iptables 进行端口转发 …

networking iptables docker docker-network

5
推荐指数
0
解决办法
1285
查看次数