我想知道这是否可能,如果可以,我如何在一台专用服务器上同时运行 nginx-proxy 和 poste.io 邮件服务器?
我可以单独运行这两个容器,但是当我尝试同时运行这两个容器时,它说我无法运行后一个容器,因为端口 443 已被另一个容器使用。
现在,当我只使用 nginx 反向代理时,我会在服务器上运行多个网站,所有这些网站都会公开端口 80 和 443 以及代理本身,这让我很困惑为什么我不能运行另一个容器做同样的事情(是的,我知道通常两个进程不应该能够使用同一个端口而不需要一些摆弄)。
我使用以下代理: https: //github.com/jwilder/nginx-proxy
我的邮件服务器使用https://poste.io
这是我在服务器上运行的网站 docker-compose 之一的示例。
application:
build: code
volumes:
- /websites/domain:/var/www/laravel
- /docker/webs/domain/logs:/var/www/laravel/storage/logs
tty: true
redis:
image: redis:alpine
db:
image: mariadb:10.2
environment:
MYSQL_ROOT_PASSWORD: toor
MYSQL_DATABASE: laravel
TEST_DB_NAME: laravel_test
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
php:
build: php7-fpm
volumes_from:
- application
links:
- db
- redis
nginx:
build: nginx
links:
- php
volumes_from:
- application
- nginx-proxy
volumes:
- ./logs/nginx/:/var/log/nginx
environment:
- VIRTUAL_HOST=www.domain.com
Run Code Online (Sandbox Code Playgroud)
在我的 nginx …
如何解决这个问题?
Errors during downloading metadata for repository 'docker-ce-stable':
- Status code: 404 for https://download.docker.com/linux/fedora/32/x86_64/stable/repodata/repomd.xml (IP: 13.226.68.18)
Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
Ignoring repositories: docker-ce-stable```
Run Code Online (Sandbox Code Playgroud) 我们的业务应用程序在两个节点(节点 1 和节点 2)上运行 Docker Swarm 部署。
应用程序需要一个卷来存储持久数据。由于尚不清楚容器部署在哪里(节点 1 或节点 2),并且应用程序的两个容器可能应该在两个节点上运行,因此我们需要一个解决方案来为所有节点提供共享卷。
为了共享卷,我们使用以下 /etc/exports 文件在第三个节点 3 上设置 NFS 服务器:
/srv *(rw,sync,anonuid=1000,anongid=1000,all_squash,subtree_check,crossmnt,fsid=root)
Run Code Online (Sandbox Code Playgroud)
(我使用 anonuid/gid 为导出中的每个文件显式设置 node3 系统中已知用户的用户信息。 all_squash 用于确保所有访问用户的所有文件权限都重写给该本地用户)
在我们的 docker-compose.yml 中,我们使用以下设置来包含卷:
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=node3.example.com,rw,nolock,soft
Run Code Online (Sandbox Code Playgroud)
我们现在遇到了一个问题,容器只是不想启动,错误消息是:
failed to copy file info for /var/lib/docker/volumes/MY_CONTAINER_nfs-data/_data: failed to chown /var/lib/docker/volumes/MY_CONTAINER_nfs-data/_data: lchown /var/lib/docker/volumes/MY_CONTAINER_nfs-data/_data: operation not permitted
Run Code Online (Sandbox Code Playgroud)
经过一番挖掘后,我发现问题在于 Node3 服务器上导出的 NFS 目录上的初始空文件夹。一旦我放入一个空文件,节点 1 和节点 2 中的容器启动就完全正常。
有人对此有解释吗?
在过去的一周里,我一直在为一个非常奇怪的网络问题而苦苦挣扎。总之,除非我运行tcpdump -i br-XXXXX
,否则我的容器无法访问互联网(这使网桥进入混杂模式)
我使用 Compose 提出了两个容器:
version: '3'
services:
seafile:
build: ./seafile/build
container_name: seafile
restart: always
ports:
- 8080:80
networks:
seafile_net:
ipv4_address: 192.168.0.2
volumes:
- /mnt/gluster/files/redacted/data:/shared
environment:
- DB_HOST=10.200.7.100
- DB_PASSWD=redacted
- TIME_ZONE=America/Chicago
depends_on:
- seafile-memcached
seafile-memcached:
image: memcached:1.5.6
container_name: seafile-memcached
restart: always
networks:
seafile_net:
ipv4_address: 192.168.0.3
entrypoint: memcached -m 256
networks:
seafile_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.0.0/24
Run Code Online (Sandbox Code Playgroud)
运行的容器:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93b1b773ad4e docker_seafile "/sbin/my_init -- …
Run Code Online (Sandbox Code Playgroud) 如何修复 修复 APT 存储库错误 我正在使用 Debian GNU/Linux 9.13 (stretch),如何修复此更新错误?并导入 Docker GPG 密钥?
root@test:~# apt-get update
Ign:1 http://security.debian.org stretch/updates InRelease
Err:2 http://security.debian.org stretch/updates Release
404 Not Found [IP: 111.73.1113.145 90]
Get:3 https://download.docker.com/linux/debian stretch InRelease [44.8 kB]
Ign:4 http://ftp.de.debian.org/debian stretch InRelease
Err:5 http://ftp.de.debian.org/debian stretch Release
404 Not Found
Err:3 https://download.docker.com/linux/debian stretch InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7PB0A8C2F192FFDM
Reading package lists... Done
E: The repository 'http://security.debian.org stretch/updates Release' does no longer have a …
Run Code Online (Sandbox Code Playgroud) 我对 Ansible 及其默认值的方式有一些问题。我想要完成的是将 Docker 容器绑定到 eth1(如果存在),否则使用 lo。
我最初的方法是使用默认的未定义变量,如下所示:
shell: docker run -d -p {{ ansible_eth1.ipv4.address | default(127.0.0.1) }}:27017:27017 [...] dockerfile/mongodb
Run Code Online (Sandbox Code Playgroud)
不幸的是,Ansible 抛出了以下错误。
fatal: [server] => One or more undefined variables: 'ansible_eth1' is undefined
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个版本,例如:
shell: docker run -d -p {{ ansible_eth1.ipv4.address | ansible_lo.ipv4.address }}:27017:27017 [...] dockerfile/mongodb
Run Code Online (Sandbox Code Playgroud)
这给了我另一个错误:
failed: [server] => {"changed": true, "cmd": "docker run -d -p {# ansible_eth1.ipv4.address | ansible_lo.ipv4.address #}:27017:27017 [...]", "delta": "0:00:00.021053", "end": "2014-11-01 17:22:04.457375", "rc": 127, "start": "2014-11-01 17:22:04.436322"}
stderr: /bin/sh: 1: ansible_lo.ipv4.address: not …
Run Code Online (Sandbox Code Playgroud) 我们目前正在使用 Docker 进行开发,目前正在研究如何使用 Docker 在其他环境中运行我们的软件,例如登台和生产。
我们现在要做的是使用 Jenkins 编译我们的 Java 软件,然后 - 在同一个 Jenkins 构建中 - 还构建一个 Docker 镜像,Java 软件将使用 docker-compose 在其中运行。
现在,在构建 Docker 映像后,我们需要将该映像传送到运行软件的(远程)Docker 主机。这个远程 Docker 主机与运行 Jenkins 的主机不同。我相信我们可以通过遵循这个问题的公认答案来做到这一点。
但是,一旦将映像复制到 Docker 主机 - 我们如何使用 启动该映像docker-compose
?我们复制的图像只是图像 - 而不是docker-compose.yml
文件或Dockerfile
就此而言。
我们有一个基于 Docker 的开发环境,由于我们的临时和生产服务器不是基于 Docker - 我们正在努力使它们尽可能相似(Linux 发行版、LAMP 版本、配置......)。
我看到大多数 Docker hub 的官方镜像(例如 mysql)基于 Jessie(Debian),我们的服务器运行 Centos 6/7(RedHat),所以我们“从”Centos 创建了我们自己的自定义镜像,它具有所有必需的安装和因此它类似于生产环境。
我的问题是 - 确保我们在 Docker 镜像和生产服务器上使用相同的 Linux 发行版对我们来说真的很重要,还是浪费时间而我们应该只使用官方镜像?
谢谢。
所以,我一直在我的 docker 容器(nginx 连接到 php-fpm)上运行一些基准测试,它比裸机慢 70 倍以上。与每秒 7,000 个裸机相比,我每秒可以管理 100 个请求。
docker-compose.yml:
version: '3'
services:
#web
frontend:
build:
context: ./environment/nginx
dockerfile: ./Dockerfile
container_name: nginx_software
restart: always
ports:
- 80:80
volumes:
- ./environment/nginx/nginx.conf:/etc/nginx/nginx.conf
links:
- php
php:
build:
context: ./environment/php
args:
version: 7.3-fpm
dockerfile: ./Dockerfile
container_name: php_software
restart: always
ports:
- 9000:9000
volumes:
- ./api:/var/www/software:cached
links:
- mysql
mysql:
build:
context: ./environment/mysql
args:
version: 5.7
dockerfile: ./Dockerfile
container_name: mysql_software
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 3306:3306
volumes:
- ./environment/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: …
Run Code Online (Sandbox Code Playgroud) 我有一个绑定端口 2222:22 的 docker 容器。可以使用连接ssh -T sub.example.com -p 2222
。
我正在寻找一种无需指定端口号即可访问 ssh 容器的方法。我认为这可以通过 DNS 记录来完成。
我SRV _ssh._tcp.sub 5 10022 sub.example.com
在提供商的管理界面中为我的域设置了 DNS 记录,这不起作用。
有没有办法做到这一点?
我在 AWS EC2 实例上运行 docker,并且希望阻止某些容器访问 EC2 实例元数据(IP 地址为 169.254.169.254)。我认为我可以通过在存在以下 ip 表规则的情况下以特定用户(例如 userx)运行这些容器来实现此目的:
$ iptables -A OUTPUT -m owner --uid-owner userx -d 169.254.169.254 -j DROP
Run Code Online (Sandbox Code Playgroud)
当容器通过主机网络运行时,这会按预期阻止连接:
$ docker run -it --rm --network host -u $(id -u userx):$(id -g userx) appropriate/curl http://169.254.169.254/latest/meta-data/
...blocks..
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,当容器在自己的网络中运行时允许连接
$ docker run -it --rm -u $(id -u userx):$(id -g userx) appropriate/curl http://169.254.169.254/latest/meta-data/
...show metadata...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?或者,是否有其他一些技术可以为特定容器提供完整的网络访问权限,同时阻止实例元数据?
我读到不应在同时运行 ESXi 虚拟机的机器上实施软件 RAID。这是否意味着我也想在该服务器上避免使用 LVM 和/或 LXC/Docker 容器?
谢谢
我正在运行两个 docker 容器,一个用于 hadoop 基本服务,另一个用于水槽。服务运行成功。我链接了两个容器 env 变量是由 docker 成功自动设置的。
1.2.3.4 7ab4ffb30dc0
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
Run Code Online (Sandbox Code Playgroud)
这是我用于 hadoop 的 /etc/hosts 文件。当我跑
hadoop fs -ls /
hadoop fs -ls hdfs://127.0.0.1:8020/
Run Code Online (Sandbox Code Playgroud)
工作正常。但如果我跑
hostname
Run Code Online (Sandbox Code Playgroud)
它返回 7ab4ffb30dc0
所以我试过了
hadoop fs -ls hdfs://1.2.3.4:8020/
Run Code Online (Sandbox Code Playgroud)
它说 Call From 7ab4ffb30dc0/1.2.3.4 to 7ab4ffb30dc0:8020 failed on connection exception: java.net.ConnectException: Connection denied; 有关更多详细信息,请参阅:http : //wiki.apache.org/hadoop/ConnectionRefused
有什么建议?
你好,我是从那个网站学到的
这些是我学习解决服务器故障问题的方向
telnet localhost
Run Code Online (Sandbox Code Playgroud)
说connection refused
。它试图连接到 127.0.0.1 和 0::
telnet feorar.org
Run Code Online (Sandbox Code Playgroud)
工作,所以telent守护进程正在运行
telnet …
Run Code Online (Sandbox Code Playgroud)