我们计划为我们的应用程序服务构建一个小型docker集群.我们考虑使用2个主vms用于ha,1个consul(如果我们选择Swarm)和5-10个主机用于容器.我们还没有决定使用什么 - Docker Swarm或Kubernetes.
所以问题是Swarm和Kubernetes的"硬件"需求(CPU内核,RAM)管理器可以满足这个小型集群的协调.
我们创建了一个包含多个服务的docker compose文件.这些服务的映像使用"build"配置选项在运行时构建.相应的Dockerfile在相应的目录中给出.
示例docker撰写文件...
version: '3'
services:
db2server:
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
build: ./appruntime
depends_on:
- db2server
Run Code Online (Sandbox Code Playgroud)
此docker compose文件与docker-compose命令一起使用.
db2server&appruntime目录中存在的Dockerfile构建的但是当我们尝试在docker swarm中部署它时,会抛出以下错误......
docker stack deploy -c /home/docker/docker-compose.yml app
Ignoring unsupported options: build
Creating network app_default
Creating service app_db2server
failed to create service app_db2server: Error response from daemon: rpc error: code = InvalidArgument desc = ContainerSpec: image reference must be provided
Run Code Online (Sandbox Code Playgroud)
看起来在docker swarm中的堆栈部署期间忽略了'build'配置选项.
我们如何在docker swarm中的docker compose文件中部署这些服务(使用构建选项).
我创建了一个服务,并将其暴露在我的docker swarm节点中的localhost上,但我可以公开访问该服务.
我删除并重新部署了docker堆栈,但仍然存在同样的问题.
这是我的docker-compose.yml我用来在堆栈中部署服务
version: "3"
networks:
api-net:
ipam:
config:
- subnet: 10.0.10.0/24
services:
health-api:
image: myprivateregistry:5000/healthapi:qa
ports:
- "127.0.0.1:9010:9010"
networks:
- api-net
depends_on:
- config-server
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
Run Code Online (Sandbox Code Playgroud)
我没有添加它所依赖的服务,因为我不认为这是问题所在.
很少有人说它在docker swarm模式下不受支持.而不是那种情况下的解决方案.
Elasticsearch旨在以集群模式运行,我所要做的就是通过环境变量定义集群中的相关节点IP,只要网络连接可用,它就会连接并将其他节点连接到集群.
我有3个节点,1个充当docker swarm管理器,另外两个是worker.我已经初始化了管理器并加入了工作节点,从这个角度看,一切都很好.
现在我试图以一种允许我将所有节点加入同一个弹性搜索集群的方式运行elasticsearch容器,但是,我希望节点使用其覆盖网络接口加入,这意味着我需要知道容器运行docker service create命令时的内部IP地址,我该怎么做?我是否必须使用像领事这样的东西来实现这一目标?
一些澄清:
我需要知道,在为服务创建时,所有Elasticsearch参与者的IP地址(或DNS名称)都可以正确启动集群.这必须是在创建时而不是之后.另外,据我所知,我可以为所有服务公开端口9200/9300并使用外部机器IP并使其工作,但我想使用覆盖网络来完成所有这些通信(我认为这是什么群模式是为了).
我正在使用Docker Swarm来测试AWS上的服务.我最近对此服务应用了这样的更新:
docker service update --image TestImage:v2 --update-parallelism 2 \
--update-delay 10s TestService2
Run Code Online (Sandbox Code Playgroud)
更新按预期工作,服务将任务容器更新为v2.然而,快速docker service ps TestService2 | grep "v1"揭示了一堆关机TestImage:v1任务.
a0w77kj0k6jfg4r9g4nz47zzg \_ TestService2.1 TestImage:v1 W1 Shutdown Shutdown 36 minutes ago
2of4mc63ekzbib01w3x7q6sdm \_ TestService2.2 TestImage:v1 W2 Shutdown Shutdown 37 minutes ago
495frrpza5pxt205o1594x54a \_ TestService2.3 TestImage:v1 W1 Shutdown Shutdown 36 minutes ago
57l0gsqd26u2e5gdj30w8mcn9 \_ TestService2.4 TestImage:v1 M1 Shutdown Shutdown 36 minutes ago
baoe1i79fswb34ydwbpafg6tm \_ TestService2.5 TestImage:v1 M3 Shutdown Shutdown 35 minutes ago
3uxi7kwxb73z69km6s17son58 \_ TestService2.6 TestImage:v1 M2 Shutdown …Run Code Online (Sandbox Code Playgroud) 我有两个现有的docker容器web和db.我想链接这两个容器,以便它们相互通信.如果我使用--link命令意味着它将web链接到新映像而不是db.
我试图了解start_periodDocker Compose 的工作原理。如果我们进行以下健康检查:
--start-period=60s --retries=2
Run Code Online (Sandbox Code Playgroud)
这是否意味着 Docker Swarm 会尝试两次,每次等待 60 秒才认为容器不健康?
谢谢。
我试图更好地理解 Docker,但在这样做的过程中,我似乎损坏了我的应用程序的 PostgreSQL 数据库。
我正在使用 Docker Swarm 启动我的应用程序,但在 PostgreSQL 容器中的循环中收到以下错误:
2021-02-10 15:38:51.304 UTC 120 LOG: database system was shut down at 2021-02-10 14:49:14 UTC
2021-02-10 15:38:51.304 UTC 120 LOG: invalid primary checkpoint record
2021-02-10 15:38:51.304 UTC 120 LOG: invalid secondary checkpoint record
2021-02-10 15:38:51.304 UTC 120 PANIC: could not locate a valid checkpoint record
2021-02-10 15:38:51.447 UTC 1 LOG: startup process (PID 120) was terminated by signal 6
2021-02-10 15:38:51.447 UTC 1 LOG: aborting startup due to startup process failure …Run Code Online (Sandbox Code Playgroud) 我有一个docker swarm集群,它包含1个master 3节点.当我们通过swarm master部署容器时,例如使用以下命令
docker -H tcp://<master_ip>:5001 run -dt --name swarm-test busybox /bin/sh
Run Code Online (Sandbox Code Playgroud)
Swarm将自动选择一个节点并部署我的容器.有没有办法手工挑选一个节点?例如,我想在节点1中部署容器.
有没有办法记录使用docker service createdocker swarm模式创建的容器?