标签: docker

docker-compose exec composer 作为用户

我有一个 docker-compose 设置在我的本地机器上完美运行,用于使用 nginx、php7-fpm 和 mysql 的 symfony 项目。

我经常需要通过 composer 安装新的包,所以我只是像这样将命令传递到我的 php-fpm 容器:

docker-compose exec my-php-fpm-container composer install
Run Code Online (Sandbox Code Playgroud)

问题是以 root 身份安装所有软件包,所以我每次安装时都必须 chown。

我知道标志“--user”存在,但如果我使用它,它会出现以下错误:

错误:没有这样的服务:作曲家

有没有办法以本地机器用户身份运行 docker-compose exec 命令,以便新的 Composer 安装的文件和文件夹使用我的本地 linux 用户所有权而不是 root 创建自己?

php-fpm symfony docker composer docker-compose

5
推荐指数
1
解决办法
8656
查看次数

docker run 尝试挂载我没有要求的文件

当我尝试在没有任何挂载的情况下运行映像时,为什么 Docker 仍在尝试挂载我没有要求的东西?

docker run --rm myapp bash

docker: 来自守护进程的错误响应:无法在现有文件上挂载卷,文件存在 /var/lib/docker/aufs/mnt/9326735ac6d36724bcb8e49ac2f0dd8288ad92ce385fe24ebaffc19a3a9c5756/etc/myapp.yml。

我有一个正在运行的容器来挂载这个文件,但是当我想运行一次性命令时,为什么 Docker 试图挂载它?

docker

5
推荐指数
1
解决办法
3876
查看次数

如何在aws中集群rabbitmq

为了在 AWS 环境中对 rabbitmq 进行集群,我尝试了所有可以想到的组合。但回顾一下:

  1. 关闭并删除我本地 ubuntu 14 上的 erlang 和 rabbit 发行版
  2. 尝试了网络上的自动配置模块
  3. 默认安装的 ubuntu 14 版本不会削减它。
  4. erlang cookie 匹配 - 这在下面演示

主机名不匹配是唯一的难题。节点本身认为它的主机名分别是“q1”或“q2”。当我尝试将容器的主机名设置为主机的私有 dns 名称(以便它可以连接到另一个节点)时,容器中的兔子实例崩溃了。不低于如何hostname产生q2但我炮击了亚马逊私人 dns?

root@q2:~# hostname
q2
root@q2:~# exit
christian@q2:~$ logout
Connection to ip-10-0-3-101.us-west-2.compute.internal closed.
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的rabbitmq docker 镜像。

docker run -d --restart always --hostname q1 --name rabbitmq -p 4369:4369 -p 15671:15671 -p 25672:25672 -p 15672:15672 -p 5672:5672 -e RABBITMQ_HIPE_COMPILE=1 -e RABBITMQ_ERLANG_COOKIE='ilikecookies' rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)

服务启动就好了

root@q1:~# curl -I localhost:15672
HTTP/1.1 200 OK
Content-Length: 1419
Content-Type: …
Run Code Online (Sandbox Code Playgroud)

erlang amazon-web-services rabbitmq docker ubuntu-14.04

5
推荐指数
1
解决办法
1571
查看次数

Docker 和 VirtualBox 在 Linux 上可以很好地协同工作吗?

我目前遇到随机冻结的服务器问题。服务器正在运行:

  1. OpenSUSE 42.2,带有最新更新
  2. 内核 4.10.1-2.g561cf31-default(来自kernel.opensuse.org)
  3. Docker 版本 1.12.6,构建 78d1802
  4. VirtualBox 5.1.14r112924
  5. 该机器具有 12 个内核和 32GB 内存,并启用了超线程。(所有服务启动后,剩余约 19GB 可用内存)

长期以来,我们一直在使用VirtualBox各种 Linux 发行版来创建虚拟机,以便我们可以测试我们的产品。最近我们决定将基于 Linux 的VirtualBox机器迁移到Docker. 不幸的是,我们还不能完全迁移到Docker。这就是为什么我们还保持 1 个虚拟机运行的原因。起初,一切正常,但随着时间的推移,机器开始随机冻结。没有日志,也没有指示可能导致这种情况的原因。我已经排除了硬件问题——我们有足够的 CPU、RAM 和 HDD 来运行我们需要的所有服务,并且硬件工作正常。

作为一项实验,我停止了所有VirtualBox机器并禁用了所有VirtualBox在启动时启动并重新启动的相关服务。到目前为止,我们还没有遇到过一次冻结。

这引出了我的问题 - 可以Docker和VirtualBox在同一台机器上运行而不会相互干扰吗?

virtualbox opensuse docker

5
推荐指数
1
解决办法
4389
查看次数

如何将应用程序日志从 Docker 容器转发到 ELK

我正在尝试在使用多种应用程序技术(Java、Rails 和各种 DB)的环境中集中日志记录。

我们希望开发人员使用 Docker Compose 来调用堆栈,但我们希望他们引用中央日志源 (ELK) 来调试问题,而不是尝试打开 shell 以运行 Docker 容器。

应用程序都写入文件系统而不是 STDOUT/STDERR,这会删除与 Docker 日志驱动程序相关联的所有选项,还有日志喷口。

我们所做的是配置容器,让 rsyslog 包含应用程序日志文件,并将这些文件转发到具有 syslog 输入的 logstash。这在将日志从 A 移动到 B 方面起作用,但是基于 syslog 输入在 ELK 中管理多技术日志是可怕的(例如,试图捕获多个 Java 堆栈跟踪或 MySQL 慢查询)。

有一个更好的方法吗?我是否应该在每个容器中运行 logstash,以便我可以将过滤器和编解码器直接应用于日志文件,这样我就不必依赖 syslog 输入?

是否有某种方法可以将 Docker 日志驱动程序与写入文件系统的应用程序日志文件一起使用?

logstash docker docker-compose

5
推荐指数
1
解决办法
3468
查看次数

为什么在docker容器中安装PHP时没有php.ini文件?

我正在docker-compose用来设置一个最小的nginx+php-fpm应用程序,但由于某种原因,docker 容器上没有 php.ini 文件(我知道是因为phpinfo()说Loaded Configuration File: (none))。

这是我的docker-compose.yml文件:

web:
  image: nginx
  ports:
    - "8080:80"
  volumes:
    - ./site.conf:/etc/nginx/conf.d/site.conf
  links:
    - php

php:
  image: php:5-fpm
  volumes:
    - .root:/var/www/html:ro
  command: bash -c "apt-get update && apt-get install -y php5-mysql && php-fpm"
Run Code Online (Sandbox Code Playgroud)

site.conf 也很简单:

server {
    index index.php;
    server_name local.myspicesage.com;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param …
Run Code Online (Sandbox Code Playgroud)

php5 php.ini php-fpm docker docker-compose

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

如何在 ECS 任务中将 Amazon EFS 挂载为数据卷?

启动配置上的用户数据:

#!/bin/bash
echo ECS_CLUSTER=prodcluster >> /etc/ecs/ecs.config

sudo yum install -y nfs-utils 
sudo mkdir /home/ec2-user/web_file_uploads 
sudo chmod 777 /home/ec2-user/web_file_uploads 

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-abcdef.efs.ap-southeast-2.amazonaws.com:/ /home/ec2-user/web_file_uploads 
Run Code Online (Sandbox Code Playgroud)

任务定义:

{
  "networkMode": "bridge",
  "containerDefinitions": [
    {
      "portMappings": [
        ...
      ],
      "essential": true,
      "mountPoints": [
        {
          "containerPath": "/src/temp_uploads/",
          "sourceVolume": "web_file_uploads",
          "readOnly": null
        }
      ],
      "name": "webapp",
      "readonlyRootFilesystem": null,
      "image": "911911911.dkr.ecr.ap-southeast-2.amazonaws.com/webapp:release6",
      "memoryReservation": 150
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": "/home/ec2-user/web_file_uploads"
      },
      "name": "web_file_uploads"
    }
  ],
  "family": "webapp-task"
}
Run Code Online (Sandbox Code Playgroud)

注意:我已将所需的端口添加到安全组。src/temp_uploads 文件夹必须包含在使用此任务定义启动的所有其他容器实例中。

问题:如果我使用 …

amazon-web-services docker amazon-ecs amazon-efs

5
推荐指数
1
解决办法
4469
查看次数

Docker Windows Server 2016 切换到 linux 容器

我在 Windows Server 2016 上安装了 docker。

ike 在这里描述:https ://store.docker.com/editions/enterprise/docker-ee-server-windows?tab =description

Install-Module -Name DockerMsftProvider -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
Restart-Computer -Force
Run Code Online (Sandbox Code Playgroud)

现在容器默认作为 Windows 容器运行,但我想让它运行 linux 容器。

在我的台式机上,我有一个托盘图标,我可以在其中切换它。但在那里的服务器上没有

那么我该怎么做才能更改为 linux 容器或如何获取托盘图标?

windows docker windows-server-2016

5
推荐指数
1
解决办法
6202
查看次数

在 fluentd 中使用多行 json

我是流利的新手。

我有在 Docker 容器中运行的应用程序。它们是以 JSON 格式登录的 Java 应用程序。JSON 消息通常分为多行。

我想使用 Docker fluentd 日志驱动程序将这些消息发送到中央 fluentd 服务器。

Docker 驱动程序将每一行分别发送到 fluentd,因此我需要能够组合这些多行消息。

我正在寻找有关如何实现这一目标的一些指示。

使用开箱即用的 fluentd config 我的日志如下所示:

20170501T050820+0000    docker.fa5077070a33     {"log":"{\"timestamp\":\"2017-05-01T05:08:20.168Z\", \"applicationName\":\"my-event-publisher\", \"applicationVersion\":\"0.0.6-SNAPSHOT\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout"}
20170501T050820+0000    docker.fa5077070a33     {"container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":"  \"logLevel\":\"INFO\", \"pid\":\"1\", \"threadId\":\"Thread-4\", \"host\":\"fa5077070a33\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e"}
20170501T050820+0000    docker.fa5077070a33     {"source":"stdout","log":"  \"logger\":\"org.springframework.context.support.DefaultLifecycleProcessor\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"}
20170501T050820+0000    docker.fa5077070a33     {"container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":"  \"message\":\"Stopping beans in phase 2147483647\""}
20170501T050820+0000    docker.fa5077070a33     {"source":"stdout","log":"}","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"}
Run Code Online (Sandbox Code Playgroud)

我应该按照什么顺序处理这个问题?

我需要:

  1. 提取每一行的“日志”部分
  2. 查找正则表达式 /^{"timestamp/ 以确定消息的开始
  3. 将每个日志语句合并为一个
  4. 将日志字符串解析为实际的 JSON

老实说,我并不真正关心 fluentd 的格式 - 添加时间戳和泊坞窗..

我宁愿只有一个包含我的 JSON 消息的文件,而 fluentd 没有添加其他字段。

我已经看过有关使用“解析器”的文档,但正如我所说,我只是不太确定顺序,因为我正在尝试将多行 JSON 结合在一起。

logging fluentd docker

5
推荐指数
0
解决办法
1621
查看次数

ubuntu 16.04 的 docker 镜像中缺少 cron 和 crontab

这是我的 Dockerfile

FROM ubuntu:16.04
RUN apt-get update -y && apt-get install -y \
  git \
  python \
  python-pip
Run Code Online (Sandbox Code Playgroud)

创建 docker 映像后,我登录并尝试设置用于测试的 cron 作业。令我惊讶的是,cron并crontab没有出现。

# ls 
app  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  
root  run  sbin  srv  sys  tmp  usr  var
# crontab -l
/bin/sh: 6: crontab: not found
# crontab -l
/bin/sh: 7: crontab: not found
# crontab -l
/bin/sh: 10: crontab: not found
# cron
/bin/sh: 11: cron: not found …
Run Code Online (Sandbox Code Playgroud)

cron docker

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