我正在尝试设置一个 docker 容器,用于绕过防火墙/NAT 以允许 SSH 访问这些路由屏障后面的计算机。本质上,我有一个 SSH 服务在 docker 容器内侦听,我的其他计算机连接到该服务,打开反向 SSH 端口转发,然后如果我想连接到防火墙后面的计算机,我改为连接到我的 dockerized反向端口上的代理服务器。例子:
防火墙计算机“鲍勃”连接到代理服务器:
ssh -R 2024:localhost:22 -N remote.server
Run Code Online (Sandbox Code Playgroud)
接下来,我通过端口连接到远程服务器,2024以便沿着隧道返回并连接到localhost:22bob:
ssh -p 2024 remote.server
Run Code Online (Sandbox Code Playgroud)
当它没有被 dockerized 时,这一切都很好,但是当我试图将它移动到一个 dockerized 服务时,我发现我sshd在docker容器中的服务器顽固地拒绝打开远程端口转发。ssh -vvv在上面的第一步中与 with 连接给出:
...
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 4
debug1: Remote: Server has disabled port forwarding.
debug3: receive packet: type 82
debug1: remote forward failure for: listen 2024, connect localhost:22
Warning: remote port forwarding failed for …Run Code Online (Sandbox Code Playgroud) 我在gcr.io/my-project/my-image:latest. 在同一个项目中,我创建了一个基于 COS(Container-Optimized OS)的 Google Compute Engine 实例,具有对 Google Storage 的读访问权限(默认启用)。我还向其服务帐户授予了对 Google Storage 的读取权限。
但是,我无法从 GCE 实例中提取图像:
$docker pull gcr.io/my-project/my-image:latest
Error response from daemon: repository gcr.io/my-project/my-image not found: does not exist or no pull access
Run Code Online (Sandbox Code Playgroud)
该医生说:
要从 Compute Engine 实例中提取私有 Docker 映像,请确保您的实例对映像的存储桶具有读取权限。如果您的实例和图像存储桶位于同一个 Google Cloud Platform 项目中,则默认情况下此配置正确。
docker google-compute-engine google-cloud-storage google-cloud-platform docker-registry
如果我在 Kubernetes 环境中运行 Wordpress,其中代码是 Docker 映像的一部分,并且有人尝试通过 Wordpress 管理员添加插件,我认为这不会很好地工作,因为只会安装该插件在他们添加插件时命中的容器上,对吗?
我将代码构建到图像中的方法是错误的吗?我考虑过的另一种方法是保存代码的卷,它可以很好地处理这个用例。是否有关于我可以在某处阅读的此类内容的讨论?
我正在使用多容器设置在 Elastic Beanstalk 上运行一个站点。我想知道获取最新图像的首选策略是什么。
在 CI 服务器上,成功提交到 master 后,我正在构建 Docker 镜像,将它们发送到 AWS Elastic Container Service 中的存储库,然后运行如下内容:
CURRENT_VERSION=`aws elasticbeanstalk describe-environments --environment-names $ENVIRONMENT_NAME | jq -r '.Environments[0].VersionLabel'`
aws elasticbeanstalk update-environment --environment-name $ENVIRONMENT_NAME --version-label $CURRENT_VERSION`
Run Code Online (Sandbox Code Playgroud)
这大致有效,但我想知道这是否是更新站点的最有效方式。更新环境的文档说的很少。
此外,环境由 4 个不同的图像组成,每个图像都有自己的存储库,并由不同的团队独立更新。问题是,如果环境已经在执行更新,有时更新会“发生冲突”。我可以等待Status“准备好”并且AbortableOperationInProgress是假的,但我不想让 CI 服务器等待几分钟。
本来想用 Amazon SQS + Lambda 来排队,但是感觉很矫枉过正。如果 EBS 已经内置了这样一个更新队列,那将非常有帮助。我不可能是第一个遇到这个问题的人。
任何想法和指针表示赞赏。
谢谢,
胡安
我在 Ubuntu Linux 上运行 Docker。我有一个Dockerfile从其他地方带来大量数据的数据。我把它Dockerfile放在我已经安装到本地文件系统 (ext4) 的外部驱动器上。然后我从该外部驱动器文件系统中运行构建。
docker build -t mycontainer .
Run Code Online (Sandbox Code Playgroud)
我在容器构建时观察了驱动器的使用情况。所有驱动器使用都在根文件系统上,而不是连接的驱动器上。
我已经阅读了一些关于将 Docker 根/基从/var/lib/docker另一个位置更改的文章,但到目前为止我得到的只是docker.service: Failed with result 'exit-code'.
我也尝试-g options在/lib/systemd/system/docker.service文件中添加:
ExecStart=/usr/bin/dockerd -H fd:// # original
ExecStart=/usr/bin/dockerd -g /new/path/docker -H fd:// # updated
Run Code Online (Sandbox Code Playgroud)
这也没有帮助。
如何告诉 Docker 使用外部驱动器?
我microsoft/windowsservercore:1803在 docker 中运行:
docker run -it microsoft/windowsservercore:1803
Run Code Online (Sandbox Code Playgroud)
在其中,我启动 powershell 并运行Get-WindowsCapabilitycmdlet 并获得以下输出:
PS C:\> Get-WindowsCapability -online
Get-WindowsCapability : The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.
At line:1 char:1
+ Get-WindowsCapability -online
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-WindowsCapability], COMException
+ FullyQualifiedErrorId : Microsoft.Dism.Commands.GetWindowsCapabilityCommand
Run Code Online (Sandbox Code Playgroud)
它指的是什么服务?我可以设置容器以便它允许我运行它或Add-WindowsCapabilitycmdlet 吗?
最终,我想运行[由微软官方分发] OpenSSH 服务器。
更新。我检查了容器中 Windows Update 和 TrustedInstaller 服务的状态(如评论中所建议的那样):前者被禁用,所以我启用了它:
Set-Service -Name wuauserv -StartupType Manual
Start-Service …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Windows 10 Enterprise Build 1803 从 WSL (Ubuntu) 中的 Spring Boot 项目运行我的 ./mvnw。但我每次都遇到相同的错误:
: not found ./mvnw:
: not found ./mvnw:
./mvnw: 53: ./mvnw: Syntax error: word unexpected (expecting "in")
Run Code Online (Sandbox Code Playgroud)
脚本在普通 Linux 服务器上运行良好。为了成功构建,我必须转到 Powershell 并运行相同的命令(“./mvnw install dockerfile:build”),然后返回到我的 WSL 并继续。
命令是构建一个 Docker 镜像,稍后在 Docker Compose 上使用该镜像。
有任何想法吗?
谢谢
我们正在运行多个全球分布的 Kubernetes 集群,这些集群需要运行相同的软件。当我们发布此软件的更新(作为上传到私有 Docker 存储库的 Docker 映像)时,我们当前的部署管道需要遍历已知部署列表,连接到每个集群并在那里更新正确的部署。这是一个繁琐、脆弱、缓慢且不可扩展的过程。
我正在寻找一种方法来解决这个问题,方法是创建定期检查新 Docker 镜像版本的部署,当他们检测到更改时,他们会拉取新镜像并更新正确的部署。这应该由每个集群独立完成,因此没有连接到每个集群的中央进程和要维护的集群列表等。
不要求所有集群同时更新,但其想法是在没有中央管理的情况下具有最终一致性。
是否有现有工具可以执行此操作或以不同方式解决此问题?
我正在尝试通过运行在 docker 容器内的 OpenVPN 客户端在我的 LAN 上运行隧道所有网络流量。
我的路由器和默认网关在 10.10.10.1 上运行
我在一个 docker 容器中运行 OpenVPN,它有自己的 IP,所有端口都在 10.10.10.25 上打开
OpenVPN 正在连接到我的 VPN 提供商 - 如果从正在运行的 docker 容器内部运行 traceroute,流量将通过我的 VPN 正确路由 - curl 也可以正常工作,正确路由流量。
但是,如果我将任何 LAN 设备上的默认网关设置为 10.10.10.25,则无法路由到 Internet。
OpenVPN docker 容器中的路由是:
0.0.0.0/1 via 10.8.8.1 dev tun0
default via 10.10.10.1 dev eth0
10.8.8.0/24 dev tun0 proto kernel scope link src 10.8.8.46
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.25
128.0.0.0/1 via 10.8.8.1 dev tun0
172.83.40.68 via 10.10.10.1 dev eth0
Run Code Online (Sandbox Code Playgroud)
在 OpenVPN 容器中运行的 …
我正在尝试通过容器 A(10.10.1.3,haproxy,以透明代理模式设置)将容器 B(10.10.1.2,使用 mysql 的自定义二进制文件并在端口 4242 上运行)的 tcp 流量路由到外部世界,它们共享10.10.1.0/24桥接模式下的相同用户定义的 docker 网络
容器 B 不暴露端口,只暴露容器 A。
在容器 B 上:
# ip route show
default via 10.10.1.1 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
# ip route replace default via 10.10.1.3
# ip route show
default via 10.10.1.3 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
Run Code Online (Sandbox Code Playgroud)
在容器 A(haproxy)上:
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_nonlocal_bind=1
iptables -t mangle -N DIVERT
iptables -t mangle -A …Run Code Online (Sandbox Code Playgroud) docker ×10
kubernetes ×2
windows ×2
aws-cli ×1
deployment ×1
haproxy ×1
maven ×1
openvpn ×1
powershell ×1
routing ×1
springboot ×1
ssh ×1
ssh-tunnel ×1
tunnel ×1
ubuntu ×1
vpn ×1
wordpress ×1