Questions tagged «docker»

Docker是一个开源项目,可自动在软件容器内部署应用程序。

1
无需停机即可更新Docker容器
假设我有一个带Web服务器的Docker容器(例如Apache 2)。现在,我想更新其下的操作系统。SF回答说,最好的方法是重建基础映像和我的Apache映像。但是部署映像意味着停机,因为必须先删除旧容器才能创建新容器,因此只有一个容器绑定到端口80/443。 但是如何在零停机时间内部署此更新?我应该使用负载均衡器并使用容器间通信吗?以及如何更新负载均衡器?
17 docker  uptime  coreos 

2
如何在Google Kubernetes Engine中选择Kubernetes负载均衡器的外部IP地址
我正在使用Google Kubernetes Engine部署网络应用,并且希望通过负载均衡器访问它,而该负载是我作为Google Cloud Platform中同一项目的一部分而控制的现有静态IP地址的,已经指向该IP。 我用于广告连播的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 我可以使用以下方法设置负载均衡器: apiVersion: v1 kind: Service metadata: name: my-load-balancer spec: ports: - port: 80 targetPort: 80 selector: app: my-app type: LoadBalancer 这提供了可在其上访问该应用程序的外部IP,但是我找不到任何将其配置为使用所需IP的方法。该服务的文件提到了spec.clusterIP设置,但这似乎并没有涉及到的外部IP。同样,一旦设置了负载平衡器,该服务的status.loadBalancer.ingress.ip字段便被设置为其外部IP地址,但这似乎不是可配置的设置。 或者,我尝试在Google Compute Engine控制台中手动创建转发规则,以将流量从我的静态IP地址引导到Kubernetes设置的目标池,但是当我尝试连接时,连接被拒绝。 有什么办法可以做-在选定的静态IP地址上在Google Kubernetes引擎上公开Kubernetes pod(或复制控制器)?

7
Docker和Shorewall
我在服务器上使用Shorewall作为简单的独立防火墙,也希望使用Docker。 通过使用Docker容器及其端口重定向, Docker 可以设置自己的iptables规则/链,如果重新启动Shorewall,这些规则/链将被杀死。因此容器将变得不可及。 是否有人在重新启动Shorewall后设法保存/恢复Docker规则,还是有人有其他解决方法? 也可以看看: 具有类似问题的Shorewall邮件列表 GitHub第#2801 @ dotcloud / docker
16 shorewall  docker 

2
如何将文件添加到没有root权限的docker容器中?
我正在尝试将文件添加到根据官方tomcat映像构建的Docker 映像中。该映像似乎没有root权限,因为tomcat如果我运行bash,则以用户身份登录: docker run -it tomcat /bin/bash tomcat@06359f7cc4db:/usr/local/tomcat$ 如果我指示Dockerfile将文件复制到该容器,则该文件具有权限644,所有者为root。据我了解,这似乎是合理的,因为Dockerfile中的所有命令都以root身份运行。但是,如果我尝试将该文件的所有权更改为,则会tomcat:tomcat收到Operation not permitted错误消息。 为什么不能更改复制到该图像的文件的权限? 如何复制它: mkdir docker-addfilepermission cd docker-addfilepermission touch test.txt echo 'FROM tomcat COPY test.txt /usr/local/tomcat/webapps/ RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile docker build . 输出docker build .: Sending build context to Docker daemon 3.072 kB Sending build context to Docker …

5
从重新导入的Docker映像/容器“未指定命令”
我试图从一台机器上获取一个Docker容器并在另一台机器上运行它,并遇到此错误:“ 来自守护程序的错误响应:未指定命令 ”。 下面是显示问题的简化示例: docker --version Docker version 1.10.1, build 9e83765 docker pull ubuntu docker run --name u1 -dit ubuntu:latest docker export -o exported u1 docker stop u1 docker rm u1 docker import exported ubuntu:imported docker run --name u1 -dit ubuntu:imported docker: Error response from daemon: No command specified. 在该示例中,我们首先提取一个图像(ubuntu),然后u1从中成功创建/运行容器。然后,我们将该容器导出到文件(exported),停止/删除该容器,将文件导入到新映像(ubuntu:imported),然后尝试从中运行新容器。它失败。
16 docker 

2
Docker exec / run shell命令嵌套
用例的简短介绍: 我正在使用一个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命令不支持嵌套在$()?
15 bash  docker 

2
Docker-可从外部访问的公开端口-忽略iptables规则
我有一个像这样运行的docker容器: docker run --name some_container_1 -p 8080:80 -d some_image 哪个工作正常。该容器将其端口80暴露给8080,可从localhost访问。 但是由于某种原因,它完全忽略了INPUT iptables规则,并且也可以从外部访问。 如何限制对Docker容器的访问以仅允许IP 123.456.789.0从外部访问它? 谢谢。 须藤iptables -L -n -v --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 365 …
15 docker  iptables 

2
在虚拟机中运行容器?
据我了解,容器比VM轻巧得多,因为它们不会虚拟化硬件,而只是将它们中运行的软件与系统中其他容器中运行的软件隔离开来。 我的情况是我无力购买额外的服务器,而我拥有的服务器都在运行虚拟机监控程序。我需要至少提供6个“服务器”来托管相对较小的Web应用程序的实例(每个实例适用于不同的客户)。为这些服务器中的每一个提供一个新的VM会很浪费,因此我计划设置2个VM并执行以下操作之一: 使用虚拟主机(Apache)在每个VM上运行应用程序的多个实例。要么 在虚拟机上设置容器,这将使我隔离环境。 考虑到这一点,是否有与容器系统相关的不可忽略的开销,这使在VM内部使用它们成为一个坏主意,还是有其他技术原因导致我不想使用容器?

5
致命错误:无法打开和锁定特权表:“用户”的表存储引擎没有此选项
当我在Docker映像中使用ubuntu 16.04和最新的mysql 5.7.19-0ubuntu0.16.04.1时显示此错误消息。 该如何解决? 重现错误 获取Dockerfile: FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server (也在此处可用) 构建并运行: docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log 将会显示以下错误日志: 2017-08-26T11:48:45.398445Z 1 [警告] root @ localhost是使用空密码创建的!请考虑关闭--initialize-insecure选项。 这正是我们想要的:尚未设置root密码的mysql。 在过去(ubuntu 14.04 / mysql 5.5)a service mysql start是可能的。现在,如果您尝试这样做,它将失败 docker run -it …
15 mysql  docker 

1
如何调试Docker缓存失效?
Docker有一个缓存,这很棒,但是我在“ docker build”输出中看到的只是: ---> Using cache 或命令的输出(这意味着它没有使用缓存)。 在我的Dockerfile中执行了一个步骤(COPY)之后,它显然不使用缓存。但我可以肯定地说,它正在复制的文件夹中没有任何更改。(这是我们的应用程序,例如,即使连续两次部署,我也会遇到无缓存的情况。) 有什么方法可以让Docker告诉我它认为发生了什么变化? 我知道Docker曾经为此检查时间戳,但这在Docker 1.8中已解决,我在Docker 1.9.x上。
15 docker 

2
AWS ECS上的CannotPullContainerError
我不太了解AWS ECS 的我[registry-url]/[namespace]/[image]:[tag]的Docker Hub图像的图像URL 。 有了Docker客户端,它就是docker run -it hendry/count。 那么,Docker Hub的映像URL是什么?

1
在Docker下api-get“从服务器读取错误”
我在Bash中运行以下命令: DEBIAN_FRONTEND=noninteractive apt-get update -qq \ && apt-get install -y build-essential git libncurses5-dev openssl \ libssl-dev fop xsltproc unixodbc-dev curl 它运行,但在中间失败: Get:96 http://security.debian.org/ jessie/updates/main linux-libc-dev amd64 3.16.7-ckt9-3~deb8u1 [991 kB] Get:97 http://security.debian.org/ jessie/updates/main curl amd64 7.38.0-4+deb8u2 [200 kB] Get:98 http://security.debian.org/ jessie/updates/main openjdk-7-jre amd64 7u79-2.5.5-1~deb8u1 [176 kB] Get:99 http://http.debian.net/debian/ jessie/main libgtk2.0-0 amd64 …
14 debian  docker 

3
限制Docker容器的网络访问
我正在创建一个仅SFTP的Docker容器,该容器将由多个人使用,其唯一目的是在自己的chrooted环境中上载和管理文件。 从表面上看,这是非常安全的:我将禁用每种形式的bash登录,并且不会在其中运行任何其他进程。但是,我想进一步加强一点: 我想阻止此容器从内部访问Internet,但其目的是成为SFTP服务器。 需要说明的是:我知道如何防止外界访问我的容器-我可以设置传入iptables规则,并且可以在docker run命令中仅公开SFTP端口。 但是,当在容器内运行时,我想使以下命令失败(例如): curl google.com 我的目的是减少被黑客入侵的容器可能造成的损失(不能用于发送垃圾邮件等)。
14 ssh  security  sftp  docker 

1
计算Docker容器中允许的CPU数量
我的具体情况如下。我使用特定的cpuset启动docker容器: docker run --cpuset-cpus="0-2" # ... 在该容器中,我运行一个shell脚本作为入口点,并且该shell脚本将make在某个时刻运行。我想弄清楚会有多少工作(-j)。我当然可以通过环境传递分配的CPU数量,但是自动检测它的方法将是首选。 我知道我可以使用taskset -c -p $$或cat /proc/self/status | grep Cpus_allowed_list检索Cpus_allowed当前进程的,但是我不知道如何检索允许的CPU的实际数量。我想避免解析这些命令的输出或摆弄Cpus_allowed掩码,但是在没有选项的情况下会这样做。

8
Docker pull:TLS握手超时
我总是得到这个(Ubuntu 16.04 LTS): $ docker pull nginx Using default tag: latest Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout 但是curl TLS可以正常工作(除了auth错误): $ curl https://registry-1.docker.io/v2/ {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]} 甚至一个小的golang程序(模仿docker)也可以正常工作: package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("https://registry-1.docker.io/v2/") if err != nil { panic(err) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.