标签: docker

在 VPC 中运行 docker 并从另一台 VPC 机器访问容器

我在 AWS VPC 中运行 docker 时遇到问题。

这是我的设置:我有两台机器在 VPC 中运行:

  • 10.0.100.150
  • 10.0.100.151

两者都有分配给它们的弹性 IP,两者都运行在同一个启用 Internet 的子网中。

假设我正在运行一个 Web 服务器,该服务器在容器 10.0.100.150 机器上的容器中提供静态文件:

  • IP:172.17.0.2
  • 端口 8111 在机器上的 8111 端口上转发。

我正在尝试从我的本地机器(或另一台非 VPC 机器也尝试了一个未在 VPC 中运行的 EC2 实例)访问静态文件,并且它工作得很好。

如果我尝试从另一台机器 (10.0.100.151) 访问文件,它会挂起。我正在使用 wget 来提取文件。

试图用 tcpdump 和 ngrep 调试它,我看到的是请求到达了容器。如果我在主机上使用 ngrep,我会看到请求进入但没有响应返回。如果我 ngrep 在容器上,我会看到请求进入,响应返回。

我尝试了多个 iptables 设置(启用后路由,手动转发端口等)但没有成功。

以任何方式提供帮助 - 甚至调试指导将不胜感激。

谢谢!

networking amazon-web-services amazon-vpc docker

10
推荐指数
1
解决办法
3609
查看次数

如何使用 Docker 配置自定义 DNS 服务器?

我需要添加几行来/etc/hosts让我的 web 应用程序在 Docker 容器中工作。

Docker/etc/hosts是只读的。

我正在尝试使用 dnsmasq:

从 ubuntu:14.04
# ...
运行 apt-get install -y -q dnsmasq
运行 echo 'listen-address=127.0.0.1' >> /etc/dnsmasq.conf
运行 echo 'resolv-file=/etc/resolv.dnsmasq.conf' >> /etc/dnsmasq.conf
运行 echo 'conf-dir=/etc/dnsmasq.d' >> /etc/dnsmasq.conf
运行 echo 'user=root' >> /etc/dnsmasq.conf
运行 echo 'nameserver 8.8.8.8' >> /etc/resolv.dnsmasq.conf
运行 echo 'nameserver 8.8.4.4' >> /etc/resolv.dnsmasq.conf
运行 echo 'address="/mydomain/127.0.6.1"' >> /etc/dnsmasq.d/0hosts
运行服务 dnsmasq 启动

但是,我无法让 Docker 使用我的 DNS 服务器:

$ docker --dns=127.0.0.1 运行 my/container cat /etc/resolv.conf
名称服务器 8.8.8.8
名称服务器 8.8.4.4

我错过了什么?

配置: …

domain-name-system mac-osx docker

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

你如何命名一个 docker 容器?

在 Ubuntu 12.04.4 上,我安装了 Docker 1.1.2。我尝试了各种尝试使用以下方法设置图像 ID:

sudo docker run -i -t --name=container1 ubuntu date
Run Code Online (Sandbox Code Playgroud)

但是,我的尝试似乎失败了。每次我做一个docker ps -a图像ID都被随机化了。如果添加,我可以设置主机名,-h container1但我想设置图像 ID。我在这里缺少什么?谢谢!

ubuntu-12.04 docker

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

为什么 Docker 容器中的某些主机卷会给出“符号链接级别太多”的错误?

我正在运行 docker 并安装了主机目录:

$ docker run -v /usr/groups/thing -ti imagename /bin/bash
Run Code Online (Sandbox Code Playgroud)

中的文件/usr/groups/thing/foo可访问:

# ls /usr/groups/thing/foo
a b c
Run Code Online (Sandbox Code Playgroud)

但文件/usr/groups/thing/bar不是:

# ls /usr/groups/thing/bar
ls: cannot open directory /usr/groups/thing/bar: Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)

这是在 Debian 上,/usr/groups/thing是一个自动挂载的 NFS 卷。

nfs symbolic-link autofs docker

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

停止 mysql docker 容器的安全方法是什么?

我使用 Docker 运行 mysql 容器。我从喜欢开始

sudo docker -d --name mysql -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql mysql_image 
Run Code Online (Sandbox Code Playgroud)

我怀疑通过停止 docker 来停止 mysql 是不安全的。我错了吗?

sudo docker stop mysql
Run Code Online (Sandbox Code Playgroud)

首先在容器内停止 mysql 是否更安全?

sudo docker exec mysql /usr/bin/mysqladmin shutdown
Run Code Online (Sandbox Code Playgroud)

mysql docker

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

使用特权 Docker 容器进行内核调优

我正在构建一个容器来调整负载均衡器的内核设置。我更喜欢使用单个特权容器将这些更改部署到映像中的主机。例如:

docker run --rm --privileged ubuntu:latest sysctl -w net.core.somaxconn=65535
Run Code Online (Sandbox Code Playgroud)

在测试中,更改生效但仅适用于该容器。我的印象是,使用完全特权的容器更改 /proc 实际上会更改底层操作系统。

$docker run --rm --privileged ubuntu:latest \
    sysctl -w net.core.somaxconn=65535
net.core.somaxconn = 65535

$ docker run --rm --privileged ubuntu:latest \
    /bin/bash -c "sysctl -a | grep somaxconn"
net.core.somaxconn = 128
Run Code Online (Sandbox Code Playgroud)

这是特权容器应该如何工作吗?

我只是在做一些愚蠢的事情吗?

做出持久改变的最佳方法是什么?

版本信息:

Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
Run Code Online (Sandbox Code Playgroud)

挂载 /proc …

linux su sysctl docker

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

yum with Red Hat Network Subscription 如何在 rhel Docker 镜像中工作?

Red Hat Enterprise Linux 7 包含对运行 Docker 容器的官方支持,并且 Red Hat 提供了一组官方的 rhel Docker 镜像。这些镜像的一个有趣特性是可以通过主机的 Red Hat Network Subscription 安装软件包,而无需在容器内执行任何配置。

引用https://access.redhat.com/articles/881893#createimage

“对于当前的 Red Hat Docker 版本,您从 Red Hat 中提取的默认 RHEL 7 Docker 映像将能够利用主机系统提供的 RHEL 7 权利。因此,只要您的 Docker 主机正确订阅并且存储库是启用您需要在容器中获取所需软件(并且可以从 Docker 主机访问 Internet),您应该能够从 RHEL 7 软件存储库安装软件包。”

我担心的是,实现这一目标的机制相当不透明。例如,当使用 rhel7.1 镜像启动一个新容器时,yum install foo甚至可以在不配置 http 代理环境变量的情况下运行。如果不了解这种机制,系统管理员可能会受到主机系统、Docker 守护程序和正在运行的容器之间未知交互的影响。这也表明主机和容器之间的正常隔离在某种程度上受到了损害(尽管是以一种良性的方式)。

重点说一下:这种订阅支持是如何实现的,它是否依赖于 Red Hat 通过订阅网络提供的 Docker 守护程序的自定义构建?

redhat yum docker rhel7

10
推荐指数
1
解决办法
4064
查看次数

将 Amazon Elastic Container Registry 与 Jenkins 集成

我正在尝试将 Amazon 新的 Elastic Container Registry (ECR) 与我的 Jenkins 构建服务集成。我正在使用 Cloudbees Docker Build & Publish 插件来构建容器映像并将它们发布到注册表。

为了使用 ECR 而不是我的私有注册表,我运行了 AWS CLI 命令aws --region us-east-1 ecr get-login,该docker login命令会发出一个命令来运行 - 但我只是复制了密码并从该密码中创建了一个类型为“带密码的用户名”的 Jenkins 凭证(用户名是总是“AWS”)。

这很好用!问题是 AWS CLI 生成的 ECR 密码的有效期仅为 12 小时。所以现在,我必须每天手动重新生成两次密码并手动更新 Jenkins 凭据屏幕,否则我的构建开始失败。

有没有办法生成永久的 ECR 登录令牌,或者以某种方式自动生成令牌?

amazon-web-services jenkins docker amazon-ecr

10
推荐指数
2
解决办法
5746
查看次数

在 ubuntu 15.04 上使用 systemd 启动 docker-compose

我有一个 docker-compose 项目,我想通过 systemd 进行控制。在暴发户中,我会使用如下所示的脚本:

description "Start/Stop server"
author "Jim Cortez"

start on filesystem and started docker
stop on runlevel [!2345]

respawn limit 3 240

pre-start script
    # wait (if necessary) for our docker context to be accessible
    while [ ! -f /projects/my_server/docker-compose.yml ]
    do
      sleep 1
    done
    /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
end script

script
    sleepWhileAppIsUp(){
        while docker ps | grep "$1" >/dev/null; do
            sleep 2
        done
    }

    sleepWhileAppIsUp "my_server"
end script

# stop docker container after the stop …
Run Code Online (Sandbox Code Playgroud)

systemd docker ubuntu-15.04

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

使用 docker + nginx + php-fpm 提供静态内容

我正在尝试使用 docker 配置一个 php webapp。这个想法是php-fpm在一个独立的容器中运行应用程序,并有另一个运行 nginx 的容器。此设置的想法是使用相同的 nginx 容器将请求代理到已经在同一台机器上工作的其他 web 应用程序。问题是我无法nginx正确处理静态文件(js、css 等),因为对这些文件的请求一直转到fpm.

这是文件系统的样子:

/
??? Makefile
??? config
?   ??? webapp.config
??? webapp
    ??? web
        ??? index.php
        ??? static.js
Run Code Online (Sandbox Code Playgroud)

我正在使用Makefile看起来像这样的(对此不感兴趣docker-compose)运行整个事情:

PWD:=$(shell pwd)
CONFIG:='/config'
WEBAPP:='/webapp'

run: | run-network run-webapp run-nginx

run-network:
    docker network create internal-net

run-webapp:
    docker run --rm \
    --name=webapp \
    --net=internal-net \
    --volume=$(PWD)$(WEBAPP):/var/www/webapp:ro \
    -p 9000:9000 \
    php:5.6.22-fpm-alpine

run-nginx:
    docker run --rm \
    --name=nginx \
    --net=internal-net \
    --volume=$(PWD)$(CONFIG)/webapp.conf:/etc/nginx/conf.d/webapp.domain.com.conf:ro \ …
Run Code Online (Sandbox Code Playgroud)

nginx static-content php-fpm docker

10
推荐指数
1
解决办法
5642
查看次数