我正在使用默认的 MongoDB Docker 映像,并且正在尝试为数据库创建一个新用户。
我目前正在尝试这样做:
FROM docker.io/mongo:3.2
MAINTAINER <alexandernst> alexandernst@gmail.com
ADD create_ddbb.js /tmp/
RUN mongod --fork --logpath /var/log/mongodb.log \
&& sleep 5 && mongo foobar /tmp/create_ddbb.js
Run Code Online (Sandbox Code Playgroud)
和create_ddbb.js:
db.createUser(
{
user: "*******",
pwd: "*******************",
roles: [
{ role: "readWrite", db: "foobar" }
]
}
);
Run Code Online (Sandbox Code Playgroud)
当我构建 Dockerfile 时,我看到:
Step 4 : RUN mongod --fork --logpath /var/log/mongodb.log && sleep 5 && mongo foobar /tmp/create_ddbb.js
---> Running in 58ba44d02508
about to fork child process, waiting until server is ready for connections. …Run Code Online (Sandbox Code Playgroud) 您不必拥有 Github 帐户即可创建和维护 git 存储库(但您确实会错过 Github 提供的独特优势)。
同样,您可以运行自己的与 Docker 兼容的容器注册表和存储库吗?
我很难找到信誉良好的文档,这些文档要么描述了如何托管我们自己的存储库,要么声明 100% 确定您绝对肯定必须拥有一个 Docker Hub 帐户,并且如果需要,您必须将容器与它们一起存储使用 Docker 工具。(我们的目的是创建我们自己的私有容器。)
我想知道将我的 docker 容器日志转发到 ELK 服务器的最简单方法是什么,到目前为止,我在搜索互联网后尝试的解决方案根本不起作用。
基本上,我有一个使用 docker-compose 运行的 docker 映像,该容器不会在本地记录任何内容(它由不同的服务组成,但没有一个是 logstash 或其他任何服务),但我看到通过docker logs -tf imageName或docker-compose logs. 由于我使用 compose 启动容器,因此我无法使用(或至少我不知道如何使用)--logs-driverdocker 选项。
因此,我想知道是否有人可以启发我,例如如何将该日志转发到 ELK 容器。
提前致谢,
问候
解决方案:
感谢 madeddie,我可以通过以下方式解决我的问题,提到我使用了 madeddie 在他的帖子中建议的基本 ELK-stack-in-containers。
首先,我更新了docker-compose.yml我的容器文件,以按照 madeddie 告诉我的那样为日志记录引用添加条目,我为每个服务添加了一个条目,我的 docker-compose 片段如下所示
version: '2'
services:
mosquitto:
image: ansi/mosquitto
ports:
- "1883:1883" # Public access to MQTT
- "12202:12202" #mapping logs
logging:
driver: gelf
options:
gelf-address: udp://localhost:12202
redis:
image: redis
command: redis-server --appendonly yes
ports:
- "6379:6379" # …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 Windows 10 映像,以便对现有的旧应用程序进行 dockerize。出于很好的理由,基本映像必须是 Windows 10而不是Windows Server。我该怎么做?
我想到的是:
1) 将我的 vanilla Windows 安装创建为 Hyper-V 机器
2)在上面安装应用程序
3) 关闭这个虚拟机
4) 将生成的 VHDX 转换为 Windows 映像 (WIM) 文件
5) 以某种方式使用它作为 docker 的基础镜像
我在正确的道路上吗?
我有以下容器设置。
在裸机服务器上安装并运行了两个 Docker 守护进程。
我想让客户访问Plugin Docker Daemon的 API (2376),以便客户可以部署/启动/停止他自己的容器。客户只能访问 API,而不能访问主机 (SSH)。
我目前面临的问题是,如果客户运行的容器执行诸如docker run -v /:/host/root Ubuntu rm -rf /host/root.
我的问题是我能做些什么来防止插件 Docker 守护程序挂载根目录/或外部的任何其他目录/home/user/,
/home/user/?--userns-remap帮助我实现我的目标吗?服务器完全属于单个客户。因此,安全性或数据泄漏不是我的主要关注点。我真正想防止的是Plugin Daemon中的某个人正在做一些愚蠢的事情,这会影响我在Main Docker Daemon中运行的容器。我想保持精益并坚持仅使用 docker 的工作流程,并且不会为 VM 创建设置额外的工作流程。
在服务器上运行我既码头工人图像和后缀SMTP服务器。smtp 服务器可通过 localhost 访问,并且未安装在任何类型的容器中。
问题是我可以在任何容器外使用 sendemail 通过终端发送电子邮件,但我无法通过在任何容器内运行 sendemail 的终端发送电子邮件。
后缀配置如下:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the …Run Code Online (Sandbox Code Playgroud) Neo4j 的 docker 容器根据文档启动并使用以下命令正常工作:
$ docker run \
--detach \
--publish=7474:7474 \
--publish=7473:7473 \
--publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--volume=$HOME/neo4j/ssl:/ssl \
--ulimit=nofile=40000:40000 \
--name=myname-neo4j \
neo4j:3.1.1
Run Code Online (Sandbox Code Playgroud)
当我尝试执行neo4j-admin数据库转储时,出现错误:
$ docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dump
command failed: the database is in use -- stop Neo4j and try again
Run Code Online (Sandbox Code Playgroud)
但是,如果 Neo4j 进程停止(这似乎是释放数据库的唯一方法),容器将关闭。这似乎是 Docker 的预期行为。因此,neo4j-admin dump在没有使用数据库的情况下,从容器内部调用似乎是不可能的。
在仍然使用 Docker 的同时如何解决这个问题?
我正在尝试在 ECS 中构建我自己的服务发现版本,因为我希望向上和向下扩展的服务不是 HTTP 服务器,因此无法由 ELB 管理。此外,ECS 尚不支持 docker 的用户定义网络功能,这将是进行服务发现的另一种方式。正如该问题讨论中提到的:
目前服务发现是一个巨大的痛苦,需要另一个服务(它本身通常是基于集群的,自我发现然后侦听其他服务)。这是一个凌乱的解决方案,更不用说实施和维护更令人讨厌的 Lambda“解决方案”了。
因此,我将采用令人讨厌的 Lambda“解决方案”路线来代替其他选择。我需要构建这个 hack 服务发现的主要内容是在我的 EC2 主机上运行的每个 docker 容器的 IP 地址。
通过 SSH 连接到充当我的 ECS 容器实例之一的 EC2 服务器,我可以运行docker ps以获取每个正在运行的 docker 容器的容器 ID。对于任何给定的 containerId,我可以运行docker inspect ${containerId}它返回 JSON,包括有关该容器的许多详细信息,特别是NetworkSettings.IPAddress与该容器的绑定(我的发现实现所需的主要内容)。
我正在尝试使用 Lambda 中的 AWS 开发工具包来获取此值。到目前为止,这是我的 Lambda 函数(您也应该能够运行它——这里没有特定于我的设置):
exports.handler = (event, context, callback) => {
var AWS = require('aws-sdk'),
ecs = new AWS.ECS({"apiVersion": '2014-11-13'});
ecs.listClusters({}, (err, data) => {
data.clusterArns.map((clusterArn) => {
ecs.listTasks({
cluster: clusterArn
}, …Run Code Online (Sandbox Code Playgroud) 我有一个在 docker 容器上运行的网站,并且我在主机的 apache 上创建了一个 VirtualHost,它对容器(在主机的 8280 端口上)执行反向代理。所以我有:
<VirtualHost *:443>
ServerName www.example.com
DirectoryIndex index.php index.html
SetOutputFilter SUBSTITUTE,DEFLATE
ProxyPass / http://localname:8280/
ProxyPassReverse / http://localname:8280/
Substitute "s|http://localname:8280/|https://www.example.com/|i"
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateKeyFile /path-to/privkey.pem
SSLCertificateFile /path-to/cert.pem
SSLCertificateChainFile /path-to/chain.pem
<Proxy *>
Order deny,allow
Allow from all
Allow from localhost
</Proxy>
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
代理运行良好,我在浏览器中写入 www.example.com 时有响应,但我的所有链接都指向http://localname:8280(如浏览器控制台中所示)和混合内容错误,这就是为什么我已经放置了替代指令,但它不起作用。
我正在使用 apache 文档中 mod_substitute 的配置。
https://httpd.apache.org/docs/2.4/mod/mod_substitute.html
但这不起作用,任何变化。docker 容器基于默认配置的 bitnami/apache 镜像。
任何帮助,将不胜感激。
这曾经用于设置时区。我在 Alpine 3.9.4 上有一个容器,它可以工作:
RUN apk add --no-cache tzdata
ENV TZ America/Chicago
RUN apk del tzdata
Run Code Online (Sandbox Code Playgroud)
我现在正在使用 Alpine Linux v3.10.3 创建一个 Docker 容器,但它不再工作了。一位用户建议我需要复制到 /etc/localtime:
RUN apk add --no-cache tzdata
ENV TZ America/Chicago
RUN cp /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk del tzdata
Run Code Online (Sandbox Code Playgroud)
如果tzdata被删除,这些都不起作用。但是,如果tzdata不删除它们,它们会起作用。为什么是这样?
docker ×10
alpine ×1
amazon-ecs ×1
apache-2.4 ×1
apparmor ×1
chroot ×1
date ×1
debian ×1
disk-image ×1
elk ×1
linux ×1
logging ×1
mongodb ×1
neo4j ×1
postfix ×1
selinux ×1
syslog ×1
timezone ×1
windows-10 ×1