我像这样启动了一个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
首先,我是 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) 我正在尝试使用该标志为容器指定 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
所以我有一个正在运行的 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 代理。
但我不知道如何让两者都与 …
我编写了一个可供多个客户端应用程序使用的 Java (Spring-Boot) 服务。对于维护/统计,我想记录哪些应用程序访问该服务。在不信任客户端的情况下如何识别客户端应用程序?
附加信息
方法
这个想法可能是使用公钥身份验证并将私钥绑定到协议/IP/端口组合之类的东西。第一部分(公钥验证)将帮助对良好维护/统计感兴趣的客户。第二部分(绑定)在我眼中是一个死胡同,因为我不知道我可以用什么来绑定:
有任何想法吗?
我在网上搜索过但无法在任何地方找到答案。我正在尝试使用 NestJS 框架运行 API Web 服务。
我正在运行 docker-compose,它会启动 API 服务器、MongoDB 实例和 mongocryptd 实例,以允许在我的应用程序上进行客户端字段级加密。
我能够连接到 MongoDB 实例,但无法连接到 mongocryptd 实例。
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) 我有一个节点应用程序、一个用于前端的 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') …
我正在尝试让 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) 我有一个天真的问题,但我注意到通过使用一些 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 的 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工作正常。在这种情况下,更改内部服务配置对我来说是不切实际的,因为我需要两个端口80并8080具有连接性,这将需要大量代码重写(并且我还有其他服务需要对不同端口进行相同的转发) 。
我尝试在主机上通过发出命令来使用 iptables 进行端口转发 …
docker-network ×10
docker ×9
mongodb ×2
angular ×1
core-api ×1
iptables ×1
java ×1
mongoose ×1
mosquitto ×1
mqtt ×1
networking ×1
next.js ×1
spring-boot ×1
traefik ×1