我无法为版本3中指定的服务指定CPU和内存.
使用版本2,它可以在服务下使用"mem_limit"和"cpu_shares"参数.但它在使用版本3时失败,将它们置于部署部分似乎不值得,除非我使用swarm模式.
有人可以帮忙吗?
version: "3"
services:
node:
build:
context: .
dockerfile: ./docker-build/Dockerfile.node
restart: always
environment:
- VIRTUAL_HOST=localhost
volumes:
- logs:/app/out/
expose:
- 8083
command: ["npm","start"]
cap_drop:
- NET_ADMIN
- SYS_ADMIN
Run Code Online (Sandbox Code Playgroud) 我有一个v3的撰写文件,其中有3个服务共享/使用相同的卷.在使用swarm模式时,我们需要创建额外的容器和卷来管理整个群集中的服务.
我打算使用NFS服务器,以便将单个NFS共享直接挂载到群集中的所有主机上.
我在下面找到了两种方法,但它需要在docker主机上执行额外的步骤 -
在主机上使用"fstab"或"mount"命令挂载NFS共享,然后将其用作docker服务的主机卷.
使用Netshare插件 - https://github.com/ContainX/docker-volume-netshare
有没有一种标准的方法,我可以使用docker compose v3直接使用/挂载NFS共享,只需执行少量/无步骤(我知道无论如何都需要"nfs-common"包)在docker主机上?
我们可以在docker engine swarm模式下跨多个主机共享一个公共/单个命名卷,这是最简单的方法吗?
不是真正的编程问题,但很想知道 Kubernetes 或 Minikube 如何管理秘密并在多个节点/pod 上使用它?
假设我创建一个秘密来拉取图像,kubectl如下所示 -
$ kubectl create secret docker-registry regsecret --docker-server=https://index.docker.io/v1/ --docker-username=$USERNM --docker-password=$PASSWD --docker-email=vivekyad4v@gmail.com
Run Code Online (Sandbox Code Playgroud)
后端会发生哪些进程,k8s 或 Minikube 将如何在多个节点/pod 上使用这些进程?
无法在使用启动模板时使启动模板与 ASG 一起工作,它使用一个小技巧与启动配置一起工作,即通过在 ASG 资源中插入启动配置名称,但它不适用于启动模板。
ASG 使用最新版本来启动新实例,但不会对预运行实例进行任何更改,尽管启动模板发生了变化。
我知道这是预料之中的,但我们是否有任何解决方法可以使启动模板与 ASG 一起使用,或者我们需要坚持启动配置本身?
TF 代码片段 -
resource "aws_launch_template" "lc_ec2" {
image_id = "${var.ami_id}"
instance_type = "${var.app_instance_type}"
key_name = "${var.orgname}_${var.environ}_kp"
vpc_security_group_ids = ["${aws_security_group.sg_ec2.id}"]
user_data = "${base64encode(var.userdata)}"
block_device_mappings {
device_name = "/dev/xvdv"
ebs {
volume_size = 15
}
}
iam_instance_profile {
name = "${var.orgname}_${var.environ}_profile"
}
lifecycle {
create_before_destroy = true
}
tag_specifications {
resource_type = "instance"
tags = "${merge(map("Name", format("%s-%s-lc-ec2", var.orgname, var.environ)), var.tags)}"
}
tag_specifications {
resource_type = "volume"
tags = "${merge(map("Name", format("%s-%s-lc-ec2-volume", var.orgname, var.environ)), …Run Code Online (Sandbox Code Playgroud) 错误-
2019-06-17T05:00:11 [SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 58P01 NativeError: 1 Message: ERROR: could not access file "pglogical": No such file or directory;, Error while executing the query [1022502] (ar_odbc_stmt.c:2546)
2019-06-17T05:00:11 [SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 42P01 NativeError: 1 Message: ERROR: relation "pglogical.replication_set" does not exist;, No query has been executed with that handle [1022502] (ar_odbc_stmt.c:3722)
Run Code Online (Sandbox Code Playgroud)
我们每3个月左右收到一次此错误。重新启动任务可以解决问题,但是恢复不起作用。
复制插槽已存在,但似乎处于非活动状态-
postgres=> select * from pg_replication_slots ;
slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin …Run Code Online (Sandbox Code Playgroud) 我有一台主机,HAProxy 使用 docker compose 作为 docker 容器运行。我想水平扩展我们的 HAProxy,使其在多个主机上高度可用。
我读了一些关于 keepalived 的教程,但这是在主机上完成的,并且是作为主机安装的 HAProxy 服务器,而不是在 docker 容器中。
是否可以通过docker化的方式部署高可用的HAProxy?
(我知道我有虚拟化设置)
我习惯于将目录从主机广泛复制到容器,然后再将它们推送到存储库。有时我们可能需要监控在 Jenkins 构建期间推送/复制的文件名。
如何使用“docker cp”查看在复制操作期间复制了哪些文件?
我有一个场景,我有一个使用crond. 如果该特定脚本失败,我需要退出容器。似乎SIGKILL不适用于 PID 1。
如何使用 bash/sh shell 从容器内部终止容器进程 (PID 1)?
最小的例子 -
Dockerfile -
FROM alpine:3.5
ENV LOGS_DIR="/rest/logs/" CRON_LOG_FILE="${LOGS_DIR}/cron.log"
RUN apk add --update python py-pip zip bash && \
pip install awscli && \
mkdir -p ${LOGS_DIR} && \
touch ${CRON_LOG_FILE}
COPY ./lr-s3.sh ./lr-entry.sh ./install_crontab.txt ./files_to_rotate.txt ./
RUN chmod +x /lr-s3.sh /lr-entry.sh && \
crontab install_crontab.txt
ENTRYPOINT ["/lr-entry.sh"]
Run Code Online (Sandbox Code Playgroud)
入口点 -
#!/bin/bash
LOGS_DIR="${LOGS_DIR:-/rest/logs}"
CRON_LOG_FILE="${LOGS_DIR}/cron.log"
mkdir -p ${LOGS_DIR}
touch ${CRON_LOG_FILE}
ln -sf /proc/1/fd/1 ${CRON_LOG_FILE}
echo "Cron [Starting]"
exec …Run Code Online (Sandbox Code Playgroud) 目前,我已经使用 Jenkinsfile 配置了一个作业,以便在发生故障时发送通知。
catch (err) {
currentBuild.result = "FAILED"
mail (to: 'viveky4d4v@gmail.com',
subject: "Job '${env.JOB_NAME}'- (${env.BUILD_NUMBER}) has FAILED",
body: "Please go to ${env.BUILD_URL} for more details. ");
throw err
}
Run Code Online (Sandbox Code Playgroud)
如果作业失败,是否可以在电子邮件中也发送控制台日志?
是否可以在 docker swarm 模式下使用 compose 文件强制重新创建容器?(我知道在 Dockerfile 中使用 HEALTHCHECK)
目前我必须先删除堆栈然后再次部署它 -
$ docker stack deploy -c stg-sm-deploy-compose.yml --with-registry-auth MY-APP
$ docker stack rm MY-APP
$ docker stack deploy -c stg-sm-deploy-compose.yml --with-registry-auth MY-APP
是否有可能将以上 3 个命令替换为 -
$ docker stack deploy -c stg-sm-deploy-compose.yml --with-registry-auth MY-APP --force-recreate
我有一个 ansible 剧本,其变量值如下 -
"instances": [
{
"architecture": "x86_64",
"tags": {
"A": "B",
"C": "D"
}
},
{
"architecture": "x86",
"tags": {
"A": "X",
"G": "D"
}
}
]
Run Code Online (Sandbox Code Playgroud)
实例列表是动态的,#values 在每次运行时可能会有所不同。
我想要 -
我尝试过with_subelements,但没有运气,因为它需要一个列表。
在 CodeBuild 项目上配置的角色在运行时环境中运行良好,但在我们从容器内部运行命令时不起作用,它显示“无法找到凭据”。
让我知道我们如何在容器内开箱即用地使用角色。
amazon-web-services amazon-iam aws-codepipeline aws-codebuild
docker ×7
docker-swarm ×2
amazon-iam ×1
ansible ×1
aws-dms ×1
bash ×1
haproxy ×1
jenkins ×1
kubernetes ×1
minikube ×1
postgresql ×1
terraform ×1