标签: docker

Docker:添加配对接口失败(不支持操作)

安装 Docker 后,当我尝试运行 Hello World 示例时出现错误:

Error response from daemon: Cannot start container 4145d0fccd96b904e4ab4413735f1129b8765429bad5be71dc8d5f4c0760666d:
failed to create endpoint high_saha on network bridge:
failed to add the host (veth7f6f907) <=> sandbox (veth788d9dc) pair interfaces: operation not supported
Run Code Online (Sandbox Code Playgroud)

(我刚刚将我的 Debian 服务器从 Wheezy 升级到 Jessie)

有谁知道为什么我会收到此错误?我在升级过程中错过了什么吗?

谢谢你的帮助。

linux debian docker ovh debian-jessie

42
推荐指数
3
解决办法
3万
查看次数

将 Docker 配置为不使用 172.17.0.0 范围

由于强制门户和默认 Docker IP 范围的问题,我试图让 Docker 使用 198.18.0.0 范围,而不是 172.17.0.0,这与我住的火车上使用的强制门户冲突。

按照docs,我创建了/etc/docker/daemon.json,并将以下内容放入其中:

{
    "bip":"198.18.0.0/16"
}
Run Code Online (Sandbox Code Playgroud)

这适用于 docker0,但它似乎没有影响任何其他网络,并且使用 docker compose 创建的第一个网络是 172.17.0.0,它重新创建了冲突。

我该怎么做才能更改所有docker 网络的默认子网(最好不必在每个撰写文件中声明我的自定义 IP 范围)?

docker docker-compose

42
推荐指数
3
解决办法
6万
查看次数

检查容器/服务是否使用 docker-compose 运行

我正在使用docker-compose.

一些命令喜欢up -d service_namestart service_name正在立即返回,如果您不希望运行的容器依赖于 shell 的状态,这非常有用,就像它们对常规up service_name. 一个用例是从某种连续的集成/交付服务器运行它。

但是这种运行/启动服务的方式并没有提供任何关于服务实际状态的反馈。

命令Docker Compose CLI 参考up确实提到了相关选项,但是,对于 version 1.7.1,它与-d以下内容互斥:

--abort-on-container-exit  Stops all containers if any container was stopped.
                           *Incompatible with -d.*
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式手动检查容器是否确实在工作并且没有因为某些错误而停止吗?

docker docker-compose

40
推荐指数
4
解决办法
5万
查看次数

“重启:始终”策略如何在 docker-compose 中工作?

我有 docker compose 文件与 PostgreSQL 和我的应用程序,如下所示:

version: '3'

services:
  postgresql:
    image: postgres:9.6.6
    ports:
      - 9932:5432
    expose:
      - "5432"
    environment:
      - POSTGRES_PASSWORD=pass
    restart: always
    volumes:
      - /data:/var/lib/postgresql/data

  myapp:
    image: myapp
    links:
      - postgresql
    depends_on:
      - "postgresql"
    restart: always
    ports:
      - "5000:5000"
Run Code Online (Sandbox Code Playgroud)

问题是restart: always当我杀死容器(使用 模拟应用程序崩溃docker kill)并且 docker-compose 不会重新启动我的容器时,策略似乎不起作用,即使退出代码是 137。当我使用restart: on-failure策略时,我观察到相同的行为。版本23docker-compose 的行为相同。我的系统是 Ubuntu Server 16.04 x64。

我的问题是:

  1. 为什么 docker-compose 不重启崩溃(被杀死)的容器?
  2. 如何检查重启策略是否有效?

docker docker-compose

40
推荐指数
1
解决办法
8万
查看次数

将 Apache2 日志写入 stdout/stderr?

我在 docker 容器中运行 Apache2,并且不想向磁盘写入任何内容,将日志写入 stdout 和 stderr。我已经看到了几种不同的方法来做到这一点(Supervisord 和 stdout/stderrApache 访问日志到 stdout),但这些看起来像是黑客。默认情况下没有办法做到这一点吗?

需要明确的是,我不想拖尾日志,因为这会导致将内容写入容器中的磁盘。

apache-2.2 docker

39
推荐指数
2
解决办法
4万
查看次数

如何在 Docker 容器中动态设置系统时间

有没有办法在不影响主机的情况下动态(在运行时)设置 Docker 容器系统时间?

使用

hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.
Run Code Online (Sandbox Code Playgroud)

使用

date -s "2 OCT 2006 18:00:00"
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

date: cannot set date: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

用例:

我需要测试对时间敏感的软件(行为取决于日期)。

其他常见用例:

  • 运行带有 y2k 错误的遗留软件
  • 2038 年合规性测试软件
  • 调试与时间相关的问题,例如过期的 SSL 证书
  • 运行在特定时间范围外停止运行的软件
  • 确定性的构建过程。

time docker

37
推荐指数
1
解决办法
6万
查看次数

在 Amazon ECS 中更新服务的容器

建议使用哪种方法来更新在 Amazon ECS 中运行的服务的容器?

AWS文档说:“如果你已经更新了应用程序的泊坞图像,你可以创建一个新的任务定义与图像,并将其部署到您的服务,一次一个任务。” 这几乎是当前文档中当前可用的所有内容(2015 年 4 月 13 日)。

我是否理解正确,在 Amazon ECS 中更新我的应用程序容器的唯一方法是创建一个新任务,然后停止旧任务并启动新任务?

我已经成功地在 Core OS 和 Fleectl 中使用了“最新”标签。这样做的好处是不需要为新的更新更改 Docker 镜像的标签,因为重新加载服务将看到新的更改并更新容器(使用相同的标签“最新”)。

您使用哪种方法在 Amazon ECS 中使用更新的 docker 镜像更新您的服务?

update containers amazon-web-services docker amazon-ecs

36
推荐指数
2
解决办法
2万
查看次数

docker-compose:在 docker-compose.yml 中运行后自动删除容器的选项

docker-compose run参考文献指出它可以--rm选择

运行后移除容器。

我想让它成为run我在docker-compose.yml.

所以,问题是

  1. 可以以某种方式在 中指定docker-compose.yml吗?
  2. 如果可以,我该怎么做?

INB4“使用 bash 别名,卢克!”:当然,我可以docker-compose.yml通过设置一些 bash 别名来强制执行此操作,alias docker-compose-run='docker-compose run --rm'但我感兴趣的是如何通过docker-compose.yml而不是通过某种外部方式来强制执行此操作。)

containers docker

36
推荐指数
2
解决办法
3万
查看次数

docker-proxy 进程的重点是什么?为什么需要用户空间 tcp 代理?

我注意到每个发布的端口都有 docker-proxy 进程在运行。这个过程的目的是什么?为什么需要用户空间 tcp 代理?

$ ps -Af | grep proxy
root      4776  1987  0 01:25 ?        00:00:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 22222 -container-ip 172.17.0.2 -container-port 22
root      4829  1987  0 01:25 ?        00:00:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 5555 -container-ip 172.17.0.3 -container-port 5555
Run Code Online (Sandbox Code Playgroud)

以及 docker 创建的一些相关 iptable 规则:

$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 1 packets, 263 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER …
Run Code Online (Sandbox Code Playgroud)

iptables docker

35
推荐指数
1
解决办法
2万
查看次数

使用 iptables 限制与 docker 容器的外部连接的步骤?

我的目标是将 docker 容器的访问权限限制为几个公共 IP 地址。是否有一个简单、可重复的过程来实现我的目标?在使用 Docker 的默认选项时只了解 iptables 的基础知识,我发现这非常困难。

我想运行一个容器,使其对公共 Internet 可见,但只允许来自选定主机的连接。我希望设置 REJECT 的默认 INPUT 策略,然后只允许来自我的主机的连接。但是 Docker 的 NAT 规则和链妨碍了我的 INPUT 规则。

鉴于以下假设,有人可以提供一个如何实现我的目标的例子吗?

  • 在 eth0 上托管公共 IP 80.80.80.80
  • 在 eth1 上托管私有 IP 192.168.1.10
  • docker run -d -p 3306:3306 mysql
  • 阻止与主机/容器 3306 的所有连接,主机 4.4.4.4 和 8.8.8.8 除外

我很高兴将容器仅绑定到本地 ip 地址,但需要有关如何正确设置 iptables 转发规则的说明,以便在 docker 进程和主机重新启动后继续存在。

谢谢!

iptables docker

33
推荐指数
4
解决办法
5万
查看次数