我想在侦听 Unix 套接字而不是端口的 Docker 容器中运行一个 web 服务器。我在共享 Docker 套接字方面发现了很多结果,但我认为这不是我想要的。
我希望主机系统能够连接到容器内正在侦听的 Unix 套接字。
我正在使用 docker-compose,所以通常的使用方式-v不起作用。
我的 ngix 站点配置:
server {
listen 80; listen [::]:80;
server_name foo.com www.foo.com;
location / {
proxy_pass http://unix:/var/lib/docker/volumes/app_shared/_data/app.https.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '3'
services:
web:
build: .
volumes:
- shared:/var/app
command: "npm start"
volumes:
shared:
Run Code Online (Sandbox Code Playgroud)
然而它说我无法连接到套接字,即使它存在于主机的这个位置。
只需设置一个 ElasticSearch 容器即可与公司的 Laravel 应用程序一起使用。创建 docker-compose.yml 并运行它是完美且直接的,但是当我想要对这个东西进行防火墙以便只能从提到的 Laravel 应用程序的一个特定 IP 访问它时,就会出现问题。
在研究过程中,我注意到很多人都遇到这些问题,即 Docker 转发的端口流量完全暴露于公众,并且他们无法正确对其进行防火墙设置。
在过去的 6 小时内我找到了几个解决方案,但没有一个有效。我认为这与 Docker 处理/转发入站流量的方式有关,而且我的 iptables 知识并不是那么广泛,因此我可以自己理解发生了什么。
这是我的 docker-compose.yml (就其价值而言):
version: '3.4'
services:
elasticsearch:
image: khezen/elasticsearch:6.1.1
container_name: elasticsearch
environment:
NETWORK_HOST: 0.0.0.0
HOSTS: 127.0.0.1
CLUSTER_NAME: fd-es
NODE_NAME: node-1
HEAP_SIZE: 31g
HTTP_SSL: "true"
ELASTIC_PWD: "somepasswd"
HTTP_CORS_ENABLE: "true"
HTTP_CORS_ALLOW_ORIGIN: /https?:\/\/localhost(:[0-9]+)?/
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./config/elasticsearch.yml:/elasticsearch/config/elasticsearch.yml
- ./data:/elasticsearch/data
- ./logs:/elasticsearch/logs
ports:
- 9200:9200
networks:
- es-network
restart: always
networks:
es-network:
driver: bridge …Run Code Online (Sandbox Code Playgroud) 我正在尝试使服务器上的 docker 更安全。主要问题是大多数人说“如果一个人可以访问 docker,他们也可以是 root”,对于少数管理员来说,这不是您想要的。
详细地说,他们可以使用-v并挂载/etc到/mnt容器中并更改影子文件并获得对主机的访问权限。他们也可以使用-d, 或特权选项来做更多的事情。
所以基本上,我想“尝试”和限制一些事情。
--add-cap-d (某些项目?)到目前为止我的想法:
可选项目是在提交到 git 代码时制作容器,并让“检查器”验证内容Dockerfile并为它们创建图像。然后对该映像进行签名并自动部署它。(但这不会再给他们太多自由)
此外,删除绑定卷并不是最好的。如果我们有一个 docker 插件,上面写着“你只能/data以用户 X 的身份挂载”,其中USERinDockerfile是那个用户 X,那就简单多了。
像docker-novolume-plugin这样的东西对于卷来说已经是一个不错的开始,虽然不限制绑定卷。
最后的问题是,我如何让用户以他们自己的用户/docker 身份构建/拉取/运行 docker 映像,而无法根系统。只要它有效,就不必完美。
我工作的环境有时 DNS 服务器会崩溃并告诉您它无法解析主机(例如,查找“github.com”失败)。它是暂时的,通常恢复得相当快。然而,有时当这种情况发生时,docker 守护进程在用户定义的桥接网络上提供的嵌入式 DNS 服务似乎会缓存错误的结果。一旦被缓存,我们最终需要完全删除网络并重建它(即,docker-compose down然后docker-compose up)。我在运行 docker-engine 17.05.0-ce、build 89658be 的 debian jessie 盒子上看到了这一点。
有没有其他人遇到过这种情况,并且可能找到了比拆除和重建网络更轻量级的解决方案?
在一个特定的情况下,我遇到了突然冻结的情况。
以下是实例的一些详细信息:
类型:t2.micro
Region/av。区域:us-west-2b
操作系统:amzn-ami-hvm-2018.03.0.20180811-x86_64-gp2 (ami-a0cfeed8)
我的这个 Ec2 实例自动冻结。
我在实例中安装了 docker。
我是这个领域的新手。
不知道从哪里可以获取系统或服务器日志来解释为什么我的 ec2 实例持续冻结,以便我可以跟踪问题。
提前致谢。
amazon-ec2 amazon-web-services unexpected-shutdown docker docker-compose
我有一个从这个 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 的 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 预路由?)。有什么建议?万分感谢!
如何每 60 秒重新启动容器服务我尝试睡眠,但它对我不起作用:
spark:
image: jaegertracing/spark-dependencies
environment:
- STORAGE=elasticsearch
- ES_NODES=http://localhost:9200
command: [ /bin/bash -c sleep 20 ]
restart: always
networks:
- elastic-jaeger
Run Code Online (Sandbox Code Playgroud) 我正在测试我的服务器的裸机恢复,它基本上用我的服务启动了一组 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)
我用相对路径和完整路径尝试了各种咒语 - …
我正在尝试创建一个基于 docker 的多容器设置,其中包含多个域的反向代理以提供服务,其中网站、数据库和基于 nginx 的反向代理在容器中运行,但我不知道我在做什么丢失(我是 nginx 新手)。
\n\n细节:
\n\nmy_example_domain_1.com,my_example_domain_2.net我的例子: (basedir multi-container:)
nginx_revproxy/default.conf:
\n\nserver {\n listen 80;\n server_name localhost;\n\n location / {\n root /usr/share/nginx/html;\n index index.html index.htm;\n }\n\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n\nserver {\n listen 80;\n server_name my_example_domain_1.com;\n location …Run Code Online (Sandbox Code Playgroud) docker-compose ×10
docker ×9
iptables ×2
nginx ×2
amazon-ec2 ×1
apache-mesos ×1
kubernetes ×1
linux ×1
networking ×1
php-fpm ×1
routing ×1
security ×1
socket ×1