我有一个 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 创建自己?
当我尝试在没有任何挂载的情况下运行映像时,为什么 Docker 仍在尝试挂载我没有要求的东西?
docker: 来自守护进程的错误响应:无法在现有文件上挂载卷,文件存在 /var/lib/docker/aufs/mnt/9326735ac6d36724bcb8e49ac2f0dd8288ad92ce385fe24ebaffc19a3a9c5756/etc/myapp.yml。
我有一个正在运行的容器来挂载这个文件,但是当我想运行一次性命令时,为什么 Docker 试图挂载它?
为了在 AWS 环境中对 rabbitmq 进行集群,我尝试了所有可以想到的组合。但回顾一下:
主机名不匹配是唯一的难题。节点本身认为它的主机名分别是“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) 我目前遇到随机冻结的服务器问题。服务器正在运行:
长期以来,我们一直在使用VirtualBox各种 Linux 发行版来创建虚拟机,以便我们可以测试我们的产品。最近我们决定将基于 Linux 的VirtualBox机器迁移到Docker. 不幸的是,我们还不能完全迁移到Docker。这就是为什么我们还保持 1 个虚拟机运行的原因。起初,一切正常,但随着时间的推移,机器开始随机冻结。没有日志,也没有指示可能导致这种情况的原因。我已经排除了硬件问题——我们有足够的 CPU、RAM 和 HDD 来运行我们需要的所有服务,并且硬件工作正常。
作为一项实验,我停止了所有VirtualBox机器并禁用了所有VirtualBox在启动时启动并重新启动的相关服务。到目前为止,我们还没有遇到过一次冻结。
这引出了我的问题 - 可以Docker和VirtualBox在同一台机器上运行而不会相互干扰吗?
我正在尝试在使用多种应用程序技术(Java、Rails 和各种 DB)的环境中集中日志记录。
我们希望开发人员使用 Docker Compose 来调用堆栈,但我们希望他们引用中央日志源 (ELK) 来调试问题,而不是尝试打开 shell 以运行 Docker 容器。
应用程序都写入文件系统而不是 STDOUT/STDERR,这会删除与 Docker 日志驱动程序相关联的所有选项,还有日志喷口。
我们所做的是配置容器,让 rsyslog 包含应用程序日志文件,并将这些文件转发到具有 syslog 输入的 logstash。这在将日志从 A 移动到 B 方面起作用,但是基于 syslog 输入在 ELK 中管理多技术日志是可怕的(例如,试图捕获多个 Java 堆栈跟踪或 MySQL 慢查询)。
有一个更好的方法吗?我是否应该在每个容器中运行 logstash,以便我可以将过滤器和编解码器直接应用于日志文件,这样我就不必依赖 syslog 输入?
是否有某种方法可以将 Docker 日志驱动程序与写入文件系统的应用程序日志文件一起使用?
我正在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) 启动配置上的用户数据:
#!/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 文件夹必须包含在使用此任务定义启动的所有其他容器实例中。
问题:如果我使用 …
我在 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 容器或如何获取托盘图标?
我是流利的新手。
我有在 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)
我应该按照什么顺序处理这个问题?
我需要:
老实说,我并不真正关心 fluentd 的格式 - 添加时间戳和泊坞窗..
我宁愿只有一个包含我的 JSON 消息的文件,而 fluentd 没有添加其他字段。
我已经看过有关使用“解析器”的文档,但正如我所说,我只是不太确定顺序,因为我正在尝试将多行 JSON 结合在一起。
这是我的 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) docker ×10
php-fpm ×2
amazon-ecs ×1
amazon-efs ×1
composer ×1
cron ×1
erlang ×1
fluentd ×1
logging ×1
logstash ×1
opensuse ×1
php.ini ×1
php5 ×1
rabbitmq ×1
symfony ×1
ubuntu-14.04 ×1
virtualbox ×1
windows ×1