标签: docker

Docker 守护进程在更新后回答“404 页面未找到”

我最近将我的 docker 从 1.4 更新到 1.5(使用包lxc_docker)。

从那以后,docker daemon 发送这样的错误(对于每个命令):

$ docker version 
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): a8a31ef
OS/Arch (client): linux/amd64
FATA[0000] Error response from daemon: 404 page not found 
Run Code Online (Sandbox Code Playgroud)

但是如果我使用以前版本的客户端,我会得到很好的答案:

$ /usr/bin/docker-old version 
Client version: 1.4.0
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 4595d4f
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef
Run Code Online (Sandbox Code Playgroud)

好像是代理设置(HTTP_PROXY …

http-proxy docker

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

管理多个 docker 容器的 IAM 安全凭证

在普通的 EC2 环境中,使用 IAM 角色和凭证(从实例元数据自动获取)管理对其他 AWS 资源的访问非常简单。使用 CloudFormation 更容易,当您将特定应用程序角色分配给实例时,您可以在其中即时创建角色。

如果我想迁移到 Docker 并进行 M 对 N 部署,其中有 M 台机器和 N 个应用程序在其上运行,我应该如何限制对每个应用程序 AWS 资源的访问?主机上的任何人都可以访问实例元数据,因此我希望每个应用程序都能够查看/修改同一部署环境中每个其他应用程序的数据。

为在此类环境中运行的应用程序容器提供安全凭证的最佳实践是什么?

security amazon-web-services amazon-iam docker

11
推荐指数
2
解决办法
1231
查看次数

Docker - 分别扩展 nginx 和 php-fpm

我一直在玩 docker 和 docker-compose 并有一个问题。

目前我的 docker-compose.yml 看起来像这样:

app:
    image: myname/php-app
    volumes:
        - /var/www
    environment:
        <SYMFONY_ENVIRONMENT>: dev

web:
    image: myname/nginx
    ports:
        - 80
    links:
        - app
    volumes_from:
        - app
Run Code Online (Sandbox Code Playgroud)

应用程序包含端口 9000 上的 php-fpm 和我的应用程序代码。Web 是带有一些配置的 nginx。

这如何发挥我所期望的功能,但是为了将 nginx 连接到 php-fpm 我有这一行:

fastcgi_pass    app:9000;
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地扩展它?例如,如果我想要运行一个 nginx 容器但运行三个应用程序容器,那么我肯定会有三个 php-fpm 实例都试图侦听端口 9000。

如何在不同的端口上拥有每个 php-fpm 实例,但仍然知道它们在任何给定时间在我的 nginx 配置中的位置?

我采取了错误的方法吗?

谢谢!

php nginx php-fpm docker

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

docker、alpine 和 matplotlib

我目前正在尝试使用 alpine 缩小我们的 docker 镜像之一:

FROM python:2.7-alpine
Run Code Online (Sandbox Code Playgroud)

但是,我在安装 matplotlib.h 时遇到了问题:

EOF
warning: no previously-included files matching '*.pyo' found anywhere in distribution
warning: no previously-included files matching '*.pyd' found anywhere in distribution
numpy/core/src/multiarray/numpyos.c:18:21: fatal error: xlocale.h: No such file or directory
compilation terminated.
numpy/core/src/multiarray/numpyos.c:18:21: fatal error: xlocale.h: No such file or directory
compilation terminated.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/pip-build-kCID_8/matplotlib/setup.py", line 383, in <module>
    **extra_args
  File "/usr/local/lib/python2.7/distutils/core.py", line 111, in setup
    _setup_distribution = dist …
Run Code Online (Sandbox Code Playgroud)

python docker

11
推荐指数
2
解决办法
7308
查看次数

如何:在弹性容器服务上 Dockerized MongoDB 复制

我有一个 Node.js 应用程序和一个在 AWS ECS 上运行的 MongoDB 数据库。我目前的设置由 2 个 ELB 和 2 个实例组成,每个实例运行一个 Docker 容器及其分配的服务(节点/mongo):

Elastic Load Balancer -> Dockerized Node -> Elastic Load Balancer -> Dockerized MongoDB
Run Code Online (Sandbox Code Playgroud)

我正在运行 MongoDB 的官方 Docker 映像:https : //registry.hub.docker.com/_/mongo/

关于如何使用 Docker 和 ECS 为 MongoDB 部署副本集的任何指示,每个副本都运行在不同的实例上?

amazon-web-services mongodb docker amazon-ecs

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

在 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
查看次数

uptime 命令在 docker 镜像中给出奇怪的结果

如果我运行 docker 镜像并调用uptime,我总是得到比真实值更长的值。

docker run -it 1d2dfb3a35ab
root@7efb3e947f73:/# uptime
 23:41:57 up 16 min,  0 users,  load average: 0.06, 0.02, 0.00
Run Code Online (Sandbox Code Playgroud)

它没有运行 16 分钟,甚至没有 16 秒。=:-O

这是一个已知问题还是什么?

uptime docker

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

强制 Ansible 注销以刷新用户组

我正在使用 Ansible 和 Docker 设置服务器。我目前正在学习这两种技术,所以如果我在这里过于愚蠢,请容忍我。

为了运行运行 Docker 命令,用户必须在 docker 用户组中。所以我这样做:

-   name: Ensure group "docker" exists
    become: yes
    group:
        name: docker
    state: present

-   name: Add ansible user to docker group
    become: yes
    user:
        name: "{{ansible_user}}"
        groups: docker
        append: yes
Run Code Online (Sandbox Code Playgroud)

在后来的剧本(但相同的剧本)中,我将执行以下操作:

-   name: build
    command: docker-compose build --pull
    args:
        chdir: /docker

-   name: start services
    command: docker-compose -f docker-compose.yml up -d
    args:
        chdir: /docker
Run Code Online (Sandbox Code Playgroud)

这在第一次运行时永远不起作用。“构建”任务总是失败,抱怨它找不到 docker(这是由于缺少访问权限)。如果我手动登录,因为{{ansible_user}}我可以很好地运行 docker,并且如果我等待足够长的时间(以便 Ansible 将打开一个新的 SSH 会话,我认为)剧本也可以正常工作,这让我相信{{ansible_user}}没有由于 Ansible 将 SSH 会话重新用于剧本中的所有任务,因此选择了新组。

所以我该怎么做?我也试过 …

permissions ansible docker docker-compose ansible-playbook

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

使用 cgroupv2 (--cgroupns=private) 时,Systemd 无法在 docker 容器中运行

我将在下面附上最小化的测试用例。但是,它是一个简单的 Dockerfile,具有以下几行:

VOLUME ["/sys/fs/cgroup"]
CMD ["/lib/systemd/systemd"]
Run Code Online (Sandbox Code Playgroud)

它是基于 Debian:buster-slim 的映像,并在容器内运行 systemd。实际上,我曾经像这样运行容器:

$ docker run  --name any --tmpfs /run \
    --tmpfs /run/lock --tmpfs /tmp \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro -it image_name
Run Code Online (Sandbox Code Playgroud)

在我升级一堆主机 Linux 软件包之前,它曾经运行良好。主机内核/systemd 现在似乎默认 cgroup v2。之前是cgroup。它停止工作。但是,如果我提供内核选项以便主机使用 cgroup,则它会再次运行。

在不提供内核选项的情况下,修复是添加--cgroupns=hostdocker run除了/sys/fs/cgroup以读写方式安装(:rw代替:ro)之外。

我想避免强迫用户提供内核选项。尽管我远非专家,但强制为 docker 容器使用主机命名空间对我来说并不合适。

我试图理解为什么会发生这种情况,并弄清楚应该做什么。我的目标是在 docker 中运行 systemd,其中主机遵循 cgroup v2。

这是我看到的错误:

$ docker run --name any --tmpfs /run --tmpfs /run/lock --tmpfs /tmp \
    -v /sys/fs/cgroup:/sys/fs/cgroup:rw -it image_name
systemd 241 running in system mode. (+PAM +AUDIT …
Run Code Online (Sandbox Code Playgroud)

cgroup systemd docker

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