我正在尝试查找容器重新启动的历史记录。
当然STATUS, a 上的字段docker ps将显示当前的正常运行时间。
但是,如果我有一个带有重启策略的容器,例如restart: unless-stopped并且它经历了多次重启 -如何检查重启/正常运行时间历史记录?
如果 docker 引擎本身没有跟踪这个 - 有没有已知的好方法来处理这个问题?
我有一个从这个 repo克隆的 LEMP 堆栈的 docker 设置。
在运行窗口 10 的开发机器上一切正常,但是当我将图像推送到 docker hub 并将其拉到我的 VPS 上时,无论我做什么,我总是收到此错误:
[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
Run Code Online (Sandbox Code Playgroud)
此错误来自两个文件。
这是代码:
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
&& rm /etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)
第二个 来自这个 Nginx default.conf 文件
这是代码:
location ~ \.php$ {
...
fastcgi_pass php-upstream;
...
}
Run Code Online (Sandbox Code Playgroud)
我说这两个文件是 b/c 其他地方没有引用 php-upstream 的原因。
我已经尝试了添加/删除主机、添加depends_on、更改 nginx、php 版本、禁用 selinux 的所有可能组合,但它不起作用。我总是在生产中遇到相同的错误,但在本地服务器上一切正常。
首先我很抱歉,因为我是开发人员,试图了解一些服务器的东西。如果这个问题在这里没有任何意义,我请求版主不要太苛刻。
根据我的理解,我们在 docker hub 中有 docker 镜像,用于运行容器。所以对我来说 docker hub 镜像是镜像包。为了管理容器,我们使用 kubernates。现在 helm 是 kubernates 的包管理器。Helm charts 是 docker-images 或 kubernate clusers 的包还是什么?
在我的生产服务器中,我们有几个上游,它们是在带有 nginx 的反向代理后面运行的 docker 容器。其中一个容器是 mqtt 代理(mosquitto),我们用来通过 websockets 进行连接。这是我们的 nginx.conf 文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream br-frontend {
server br-frontend:3000;
}
upstream br-backend {
server br-backend:5000;
}
upstream mosquitto {
server mosquitto:9001;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
server {
listen 443 ssl default_server;
server_name _;
location / {
proxy_pass http://br-frontend/;
}
location /api {
proxy_pass http://br-backend;
}
location /swagger.json {
proxy_pass http://br-backend/swagger.json;
}
location /swaggerui { …Run Code Online (Sandbox Code Playgroud) 我有带 Docker 的 Ubuntu 服务器来为 MySQL 和 SSH/SFTP 提供服务,我需要对除3306和22之外的所有端口进行防火墙设置,这是非常标准和微不足道的要求,对吧?
现在,我设法找到了一种解决方案,但在应用它之后,它对我来说并不完全有效,要么:
iptables: falseDocker 的daemon.json配置文件)我尝试了许多其他搜索结果,但它们大多非常复杂,以至于我不明白他们在做什么,或者他们编写了大量脚本,这让我成为一个 iptables 外行,从它那里获取一些东西是一项不可能完成的任务。
提议的解决方案看起来相当简单且易于理解,但整个 Docker 网络的复杂性使得调试变得更加困难。
有人可以分享他们针对 Docker 主机的工作 iptables 规则或至少指导我正确的方向吗?
我使用 docker-compose 来启动服务,这是我的 yaml:
version: '3.7'
services:
mysql:
container_name: 'mysql'
image: mysql:8.0.13
command: --default-authentication-plugin=mysql_native_password
user: 1000:1000
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
- ./config/custom.cnf:/etc/mysql/conf.d/custom.cnf
networks:
- database
restart: always
networks:
database:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
编辑: 我发现允许 Docker 管理 iptables 规则是推荐的并且要求不高,至少从长远来看是可以的,即使我没有以我喜欢的方式打开所需的端口,它仍然可以有效的。此时我想要的是找出是否可以使用 iptables 来阻止 Docker 打开的端口以及如何(通过 mangle 预路由?)。有什么建议?万分感谢!
全新且完全打补丁的 Ubuntu 18.04 实例(在 Linode VPS 上),带有从官方 Docker 存储库安装的 Docker 18.09.0(构建 4d60db4)。
IPv4 网络运行良好,无论是在容器之间还是内部到外部(一旦我设置了net.ipv4.ip_forward=1)。
然而,IPv6 甚至不会在容器之间进行通信,更不用说在外部进行通信了。
我尝试了很多东西,但发现本指南是最好的(除了它不起作用:-))
因此我有...
更新/etc/docker/daemon.json了以下内容并重新启动:
{
“ipv6”: true,
“fixed-cidr-v6”: “2001:db8:1::/64”
}
Run Code Online (Sandbox Code Playgroud)
检查了 MTU。
运行两个 docker 容器来测试这个:
sudo docker run -itd ajeetraina/ubuntu-iproute bash
sudo docker run -itd ajeetraina/centos-iproute bash
Run Code Online (Sandbox Code Playgroud)
两者都在内部显示出完美的连接性:
$ sudo docker exec -it b1cbb63b4e88 ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:acff:fe11:3 prefixlen 64 scopeid 0x20<link>
inet6 2001:db8:1::242:ac11:3 prefixlen 64 scopeid 0x0<global>
ether …Run Code Online (Sandbox Code Playgroud) 我已经在 ECS 上设置了集群、容器、任务和服务。
在我创建该服务后,它似乎正在运行“3 个所需的任务”,但是没有任何任务被创建为挂起或正在运行。实际上,它似乎什么也没做。
我的任务定义(不包括空值和空数组)是
{
"containerDefinitions": [
{
"portMappings": [
{
"hostPort": 5000,
"protocol": "tcp",
"containerPort": 25565
},
{
"hostPort": 5000,
"protocol": "udp",
"containerPort": 25565
}
],
"cpu": 0,
"memoryReservation": 1024,
"image": "itzg/bungeecord",
"essential": true,
"name": "BungeeCord"
}
],
"compatibilities": [
"EC2"
],
"taskDefinitionArn": "arn:aws:ecs:us-west-1:949960343466:task-definition/BungeeCordTask:3",
"family": "BungeeCordTask",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
}
],
"requiresCompatibilities": [
"EC2"
],
"revision": 3,
"status": "ACTIVE",
}
Run Code Online (Sandbox Code Playgroud)
我的集群有 3 个 ECS 实例,它们都在运行并且上面没有任何东西: 我的集群
我的服务在这里: 我的服务
我没有任何自动缩放、负载平衡或任何设置。但我确实有一些真正的默认服务发现。
任何人都知道为什么没有任务开始?
编辑:
我正在将现有应用程序从在裸 EC2 实例上运行迁移到使用 ECS 的容器化设置。我有两种情况需要在容器之间共享数据。一个是存储一些静态和媒体文件的 EFS 共享,另一个是日志目录,以便我可以使用 sidecar 容器中的 Cloudwatch Logs 代理将日志推送到 Cloudwatch。
网络服务器需要能够将数据写入这两个位置,但到目前为止我还无法实现。日志目录是本地卷,归root:root. 我按照这些说明设置的 EFS 共享归1000:xfs(无用户名)所有。在这两种情况下,我的网络用户 ( www-data) 都不能写入这些位置。
如何告诉 ECS 在具有给定所有者和/或组的容器内安装卷?
我正在测试我的服务器的裸机恢复,它基本上用我的服务启动了一组 docker 容器。我从备份中恢复/etc/docker,在那里我保留了所有配置和持久卷。
然后我尝试启动其中一个容器:
root@srv-backup:/etc/docker# docker-compose --verbose -f /etc/docker/docker-compose.d/20-registry.yaml up
compose.config.config.find: Using configuration files: /etc/docker/docker-compose.d/20-registry.yaml
ERROR: compose.cli.main.main: .IOError: [Errno 2] No such file or directory: '/etc/docker/docker-compose.d/20-registry.yaml'
Run Code Online (Sandbox Code Playgroud)
然而,该文件在那里:
root@srv-backup:/# ll /etc/docker/docker-compose.d/20-registry.yaml
-rwxrwxr-x+ 1 root root 842 Jan 24 15:19 /etc/docker/docker-compose.d/20-registry.yaml*
root@srv-backup:/# cat /etc/docker/docker-compose.d/20-registry.yaml
services:
registry:
container_name: registry
image: registry
labels:
- traefik.http.routers.registry.rule=Host(`registry.example.com`)
- traefik.http.routers.registry.entryPoints=https
- traefik.http.routers.registry.tls=true
- traefik.http.routers.registry.tls.certresolver=le
- traefik.http.middlewares.lan.ipwhitelist.sourcerange=192.168.10.0/24, 192.168.20.0/24
- traefik.http.routers.registry.middlewares=lan
- traefik.enable=true
restart: unless-stopped
volumes:
- /etc/docker/container-data/registry:/var/lib/registry
version: '3'
root@srv-backup:/# file /etc/docker/container-data/registry
/etc/docker/container-data/registry: directory
Run Code Online (Sandbox Code Playgroud)
我用相对路径和完整路径尝试了各种咒语 - …
今天早上我在红帽(Linux 4.18.0-240.1.1.el8_3.x86_64)上的更新/升级都遇到了这个问题,不知道该怎么做。听起来像 yum 完全卡住了因为这个。
$ sudo yum update
Updating Subscription Management repositories.
Last metadata expiration check: 2:40:27 ago on Wed 16 Dec 2020 07:53:10 AM CST.
Error:
Problem: package docker-ce-3:20.10.1-3.el7.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
- cannot install the best update candidate for package docker-ce-3:19.03.14-3.el7.x86_64
- package containerd.io-1.4.3-3.1.el7.x86_64 is filtered out by modular filtering
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Run Code Online (Sandbox Code Playgroud) docker ×10
amazon-ecs ×2
nginx ×2
amazon-ec2 ×1
containerd ×1
containers ×1
helm ×1
iptables ×1
ipv6 ×1
kubernetes ×1
linux ×1
mqtt ×1
php-fpm ×1
redhat ×1
ubuntu ×1
ubuntu-18.04 ×1
wss ×1
yum ×1