我在 AWS EC2 实例上运行 Docker 容器,Docker 容器通过 Docker 网络连接,该网络通过 etcd 集群进行复制。但所有容器都无法与外部连接。例如,如果我 ping 或 curl 主机,则 100% 的包丢失。etcd 网络通过 AWS 私有 IP 进行通信。
这是我的码头工人信息:
root@ip-10-0-127-34:/home# docker info
Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 9
Server Version: 17.05.0-ce
Storage Driver: devicemapper
Pool Name: docker-202:1-2050903-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 4.554GB
Data Space Total: 107.4GB
Data Space Available: 102.8GB
Metadata Space Used:sattler 6.922MB
Metadata Space Total: …Run Code Online (Sandbox Code Playgroud) 是否可以在 docker-compose 中拥有一个带有两个网络的 docker 容器,一个主机和另一个网桥?
我想创建一个容器网络,其中一个中央容器应该能够通过 ssh 连接到所有其他容器。通过 ssh 中央容器可以使用 Ansible 更改所有其他容器的配置。我知道不建议从一个容器 ssh 到另一个容器,我们可以使用 volume 进行数据共享,但这不适合我的用例。我能够从主机 ssh 到容器,但我不能从一个容器到另一个容器。
我正在使用的 Docker 文件是:
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y netcat ssh iputils-ping
EXPOSE 22
Run Code Online (Sandbox Code Playgroud)
Dockerfile 创建的镜像名为 ubuntu:v2
然后使用下面的命令我创建了两个容器 u1 和 u2
docker run -p 22 --rm -ti --name u1 ubuntu:v2 bash
docker run -p 22 --rm -ti --name u2 ubuntu:v2 bash
Run Code Online (Sandbox Code Playgroud)
在容器中,我正在运行以下命令以在容器中创建用户。在 u1 容器中创建用户 u1,在 u2 容器中创建用户 u2
root@d0b0e44f7517:/# mkdir /var/run/sshd
root@d0b0e44f7517:/# chmod 0755 /var/run/sshd
root@d0b0e44f7517:/# /usr/sbin/sshd
root@d0b0e44f7517:/#
root@d0b0e44f7517:/# useradd --create-home --shell /bin/bash --groups …Run Code Online (Sandbox Code Playgroud) 我认为我想做的事情很简单,但是通读有关网络的 docker compose 文档部分https://docs.docker.com/compose/networking/我发现没有有用的信息:(
我想创建 2 个子网(将来可能会更多 - 但现在我们只创建两个子网),并且能够手动将每个子网的 IP 地址分配给我在 docker-compose 中指定的容器。
如何才能做到这一点?
我有一个具有给定文件夹结构的 git 存储库
grpc-repo
|---grpc-client (:8083)
|---grpc-server (:9000)
|---docker-compose.yml
|---Dockerfile
|---Dockerfile2
Run Code Online (Sandbox Code Playgroud)
现在,这些gRPC客户端-服务器项目正常无缝运行。但是,我需要将这个项目进行 dockerize。
下面给出的是我的docker-compose.yml
version: "3.3"
services:
client:
container_name: grpc-client
build:
dockerfile: Dockerfile
context: .
volumes:
- .:/app
ports:
- 8083:8083
networks:
- my-network
server:
container_name: grpc-server
build:
dockerfile: Dockerfile2
context: .
volumes:
- .:/app
ports:
- 9000:9000
networks:
- my-network
networks:
my-network:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
对项目进行 docker 化后,我可以轻松连接到 gRPC 客户端。但是客户端无法连接到 gRPC 服务器。
它说 ...
rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法将同一端口映射到两个不同的端口,每个端口用于不同网络中的另一个容器。考虑以下 docker-compose 场景:
services:
web:
build: .
ports:
- "8080:8080"
networks:
Net1:
Net2:
serv1:
image: tomcat:7.0.92-jre8
networks:
Net1:
serv2:
image: tomcat:7.0.92-jre8
networks:
Net2:
Run Code Online (Sandbox Code Playgroud)
现在我真正想做的是实际映射“web”服务端口 8080,以便 serv1 可以将其用作 8081,而 serv2 将其用作 8082。
这可能吗?
谢谢
我有一个 Nodejs 应用程序容器化为 Linux 容器,它使用 kafka-node 库。
Kafka 在运行 Windows 的主机上运行:
我使用以下命令运行 nodejs 容器:
docker container run --network host --name nm name:1.0
Run Code Online (Sandbox Code Playgroud)
为了连接主机的 kafka,我使用以下命令:
client = new kafka.KafkaClient({kafkaHost: "localhost:9092"});
Run Code Online (Sandbox Code Playgroud)
但这会抛出:
Error: connect ECONNREFUSED 127.0.0.1:9092
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9092
}
Run Code Online (Sandbox Code Playgroud)
当我将连接命令更改为:
client = new kafka.KafkaClient({kafkaHost: "host.docker.internal:9092"});
Run Code Online (Sandbox Code Playgroud)
我正进入(状态 :
TimeoutError: Request timed out after 30000ms
at new TimeoutError (/usr/src/app/node_modules/kafka-node/lib/errors/TimeoutError.js:6:9)
at Timeout._onTimeout (/usr/src/app/node_modules/kafka-node/lib/kafkaClient.js:491:14)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7) …Run Code Online (Sandbox Code Playgroud)