我有一个带有 3 个节点的 docker swarm 配置。有一个网络仅位于其中一个节点上。在该特定节点上,docker network ls显示网络,显示docker network rm [network-id]“来自守护进程的错误响应:网络...未找到”,同时docker network inspect [network-id]显示网络,它看起来不错(范围:swarm,驱动程序:覆盖)。完全像我并行创建的测试方式来比较它。有人知道吗?我怎样才能摆脱那个网络僵尸?
我正在致力于将用于 GitLab CI/CD 构建和部署的 Docker 镜像集合从 Dockerhub 移植到 AWS 公共 ECR。除了我们用作 Docker-in-Docker 服务的标准 Docker 镜像之外,一切都按其应有的方式运行。从 Dockerhub 拉取时可以正常工作的相同镜像在从公共 ECR 拉取时无法登录。
.gitlab-ci.yml
build-push:
stage: package
image: public.ecr.aws/x/x
services:
- public.ecr.aws/x/docker-dind:20.10
Run Code Online (Sandbox Code Playgroud)
$ aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_DOCKER_REGISTRY_URL
> Logging in to Docker registry...
> error during connect: Post http://docker:2375/v1.24/auth: dial tcp: lookup docker on 8.8.8.8:53: no such host
Run Code Online (Sandbox Code Playgroud)
$ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 …Run Code Online (Sandbox Code Playgroud) 我尝试php5-fpm通过卷与我的nginx网络服务器共享我的套接字。Fpm 和 nginx 在不同的容器中运行,我想让它们通过共享卷工作,我将 fpm 中的套接字文件放在那里。
2014/04/13 10:53:35 [crit] 33#0: *1 connect() to unix:/container/fpm/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.8.2, server: docker.dev, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/container/fpm/run/php5-fpm.sock:", host: "docker.dev"
Run Code Online (Sandbox Code Playgroud)
我已经尝试将权限设置为 777 并将组更改php5-fpm.socket为www-data.
fpm 容器的 Dockerfile
FROM ubuntu:13.10
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y php5-cli php5-common
RUN apt-get install -y php5-fpm php5-cgi
ADD ./php-fpm.conf /etc/php5/fpm/php-fpm.conf
ADD ./pool.d/www.conf /etc/php5/fpm/pool.d/www.conf
ADD ./php.ini /etc/php5/fpm/php.ini
CMD ["/usr/sbin/php5-fpm"] …Run Code Online (Sandbox Code Playgroud) 我正在使用 Google Kubernetes Engine 部署一个网络应用程序,我想通过负载均衡器在我作为 Google Cloud Platform 中同一项目的一部分控制的现有静态 IP 地址上访问它,因为我想使用域名已经指向这个IP。
我用于 pod 的 yaml 文件是:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: gcr.io/my-project/my-app:latest
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法设置负载平衡器:
apiVersion: v1
kind: Service
metadata:
name: my-load-balancer
spec:
ports:
- port: 80
targetPort: 80
selector:
app: my-app
type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)
这提供了一个可以访问应用程序的外部 IP,但我找不到任何方法来配置它以使用我想要的 IP。该服务的文件提到了spec.clusterIP设置,但这似乎并没有涉及到的外部IP。同样,一旦设置了负载均衡器,服务的 status.loadBalancer.ingress.ip 字段就会设置为其外部 IP 地址,但这似乎不是一个可配置的设置。
作为替代方案,我尝试在 Google Compute Engine 控制台中手动创建转发规则,将来自静态 IP 地址的流量定向到 Kubernetes 设置的目标池,但是当我尝试连接时,连接被拒绝。
有什么方法可以做我想做的事 - 在选定的静态 IP 地址上在 Google Kubernetes 引擎上公开 Kubernetes …
docker google-compute-engine kubernetes google-cloud-platform google-kubernetes-engine
用例的简短介绍:
我正在使用docker容器来运行我的go测试go test ./...。这可以使用 轻松实现docker exec <container> /bin/sh -c "go test ./..."。不幸的是go test ./...运行在所有子目录中,我想排除一个(供应商目录)。
建议的解决方案是使用以下命令:go test $(go list ./... | grep -v '<excluded>',不知何故这让我得到以下结果:
docker run golang:1.6.2-alpine /bin/sh -c "go test " (我已经在 run 和 exec 上对此进行了测试,但它们可能使用相同的核心)。
当我使用 ssh 进入容器docker exec -it <container_id> /bin/sh并运行完全相同的命令时,它就像一个魅力。
似乎通过 docker exec/run 执行 shell 命令不支持任何嵌套的命令$()?
假设我有一个带有 Web 服务器的 Docker 容器(如 Apache 2)。现在我想更新它下的操作系统。这个 SF answer说最好的方法是重建基础镜像和我的 Apache 镜像。但是部署镜像意味着停机,因为我必须在创建新容器之前删除旧容器,所以只有一个容器绑定到端口 80/443。
但是,如何在零停机时间的情况下部署此更新?我应该使用负载平衡器并使用容器间通信吗?以及如何更新负载均衡器?
我在 Amazon Web Services 上由 kops 设置了一个 kubernetes 集群
我有 2 个站点设置。一个是通过 SSL/TLS/https 保护的,另一个是 http。两者都是 Wordpress 网站。域已更改以保护站点身份
入口配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-rules
spec:
tls:
- hosts:
- site1.com
secretName: site1-tls-secret
- hosts:
- www.site1.com
secretName: site1-tls-secret
rules:
- host: site1.com
http:
paths:
- path: /
backend:
serviceName: site1
servicePort: 80
- host: www.site1.com
http:
paths:
- path: /
backend:
serviceName: site1
servicePort: 80
- host: blog.site2.com
http:
paths:
- path: /
backend:
serviceName: site2
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
入口服务 …
我使用 SSHFS 在我的主机上挂载一个远程文件系统,我希望能够从 Docker 容器内部访问它。
我挂载远程文件系统
sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) user@remote:directory /path/to/sshfs
而且,使用 Docker,根据我的使用情况,我收到以下错误--mount:
docker run -it -v /path/to/sshfs:/target myimage bash
docker: Error response from daemon: error while creating mount source path '/path/to/sshfs': mkdir /path/to/sshfs: file exists.
Run Code Online (Sandbox Code Playgroud)
或-v:
docker run -it --mount src=/path/to/sshfs,target=/target,type=bind myimage bash
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /path/to/sshfs.
See 'docker run --help'
Run Code Online (Sandbox Code Playgroud)
是否可以将 sshfs 挂载点挂载到容器中?
在阅读并使用 docker 一段时间后,我正在考虑在我的生产环境中使用它。但是,我仍在尝试了解挂载绑定和卷之间的区别。
根据关于挂载绑定的 Dockers 文档(https://docs.docker.com/storage/bind-mounts/):
自 Docker 早期以来,绑定挂载就已经存在。与卷相比,绑定挂载的功能有限。使用绑定挂载时,主机上的文件或目录会挂载到容器中。文件或目录由其在主机上的完整或相对路径引用。相比之下,当您使用卷时,会在主机上的 Docker 存储目录中创建一个新目录,由 Docker 管理该目录的内容。
从这个(以及从玩弄)在我看来,挂载绑定和卷是一回事,唯一的区别是数据的位置。(卷存储在 docker 的“私有”存储区,而 mount 绑定可以存储在任何地方)。是的,在启动 docker 容器之前必须存在 mount bind,而当容器启动时,docker 引擎可以创建卷 - 但这种差异是不敬的性能或维护明智的。
我无法理解文档 ( https://docs.docker.com/storage/volumes/ )所述卷的所谓好处,因为它们似乎都同样适用于安装绑定。
任何人都可以解释卷和安装绑定(性能和维护方面)之间的主要区别,最重要的是它们的用例?
谢谢您的帮助。
docker ×10
kubernetes ×2
amazon-ecr ×1
bash ×1
coreos ×1
docker-swarm ×1
fuse ×1
gitlab ×1
mount ×1
networking ×1
nginx ×1
shorewall ×1
socket ×1
ssh ×1
sshfs ×1
uptime ×1
zombie ×1