我正在尝试使用 docker 和 fig 运行我的 rails 应用程序,它也使用 redis 服务器、mongodb、postgres 和 nginx,这是我的 fig.yml 的样子:
pg:
image: docker-index.my.com/postgres
ports:
- 5432
redis:
image: docker-index.my.com/redis
ports:
- 6379
mongodb:
image: docker-index.my.com/mongodb
ports:
- 27017
app:
build: .
command: bundle exec rails s
volumes:
- .:/beesor
ports:
- 3000:3000
links:
- pg
- redis
- mongodb
environment:
RAILS_ENV: production
Run Code Online (Sandbox Code Playgroud)
一切正常,直到启动应用程序的那一刻,当服务器上的 rails 初始值设定项挂钩启动然后我收到有关数据库连接的错误,数据库不存在!当然因为它不是在 Dockerfile 上创建的(见下文)
Dockerfile 内容:
# DOCKER-VERSION 0.10.0
FROM docker-index.my.com/ruby:1.9.3
MAINTAINER my.com
RUN apt-get update -qq && apt-get install -y git-core xvfb curl …Run Code Online (Sandbox Code Playgroud) 我是 docker 的新用户,即将在生产环境中从虚拟机迁移到容器。但后来,我突然意识到,最适合我的开发和质量保证环境的东西对于生产来说并不理想。
在我的 dev 和 qa 中,我将版本化项目文件夹安装到 python/php(命名它)容器中,并且我将此容器视为我的代码的“运行服务”。这使我不必拥有巨大的容器,因为当我更改代码(git commit 或其他)时,容器历史记录不会更改。
在生产中,理想的情况是我将拥有干净的独立容器,其中包含我的代码,而不是像在开发中那样安装。
那么,我是不是理解错了?你怎么做呢?从开发到生产您使用相同的容器吗?
Docker 通常不能在 3.10 之前的 Linux 内核上运行。(在某些情况下,它也可以在3.8内核中运行)。
新内核中哪些功能在旧内核中缺失,导致 docker 无法在其中运行?
docker run ...运行jenkins容器的正确命令是什么.
我在Windows 10上使用linux容器.
我在Alpine Docker中使用简单的ASP .NET Core 2.0 App构建了一个映像.Wenn我在Windows Power-Shell上运行Linux容器,一切都很好.但是如果我在PuTTY中的Linux服务器上运行Linux容器,容器将立即退出代码139.我使用了以下conmmand:
docker run -it -d -p xxxx:80 imageName
输出:
510e77c3899696823d4f1fba135cbaff3f8b4232deb1a73d41963fc3a8058d81
没有 -d
Hosting environment: Production
Content root path: /app
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)
OS:赢10
Docker版本:
Client:
Version: 17.12.1-ce
API version: 1.35
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:15:20 2018
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.1-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:17:54 2018 …Run Code Online (Sandbox Code Playgroud) 我的容器中安装了最少的Ubuntu,我想让Xserver运行.我需要XServer,因为我的应用程序需要meshlabserver,它本身需要Xserver.
我安装了xserver-xorg和所有其他软件包,但是当我尝试在容器中启动X时
/usr/bin/X :0
Run Code Online (Sandbox Code Playgroud)
它说:
Fatal server error:
(EE) xf86OpenConsole: Cannot open /dev/tty0 (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何启动X服务器?
更新:
我需要从网络命名空间访问外部 IPv6 地址。
在我的主机中,我设置了一个 SIT 隧道 (IPv6-in-IPv4),它对 IPv6 数据包进行隧道传输并通过默认接口 (eth0) 发送它。SIT 隧道依赖于 Hurricane Electric 隧道代理服务。我可以从主机 ping 外部 IPv6 地址。
$ ping6 ipv6.google.com
PING ipv6.google.com(lis01s13-in-x0e.1e100.net) 56 data bytes
64 bytes from lis01s13-in-x0e.1e100.net: icmp_seq=1 ttl=57 time=98.1 ms
64 bytes from lis01s13-in-x0e.1e100.net: icmp_seq=2 ttl=57 time=98.7 ms
Run Code Online (Sandbox Code Playgroud)
以下是有关隧道的一些详细信息:
$ ip -6 route sh
2001:470:1f14:10be::/64 dev he-ipv6 proto kernel metric 256
default dev he-ipv6 metric 1024
Run Code Online (Sandbox Code Playgroud)
有趣的部分来了。由于超出此问题范围的原因,我需要从网络命名空间内执行相同的操作(ping ipv6.google.com)。
以下是我创建和设置网络命名空间的方法:
ns1.sh
#!/bin/bash
set -x
if [[ $EUID -ne 0 ]]; then
echo "You must run this …Run Code Online (Sandbox Code Playgroud) 我已经安装了 docker。当它在 Windows 容器中运行时,它工作正常。但是,如果我切换到 Linux 容器,则会出现以下错误。
操作系统:Windows 10 Docker 桌面:2.2.0.3
错误:
Docker.Core.Backend.BackendDestroyException:
Unable to stop Hyper-V VM: Service 'Hyper-V Host Compute Service (vmcompute)' cannot be started due to the following error: Cannot start service vmcompute on computer '.'.
at Enable-MobyLinuxRequiredService, <No file>: line 103
at <ScriptBlock>, <No file>: line 804
at Docker.Core.Pipe.NamedPipeClient.<TrySendAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Docker.Core.Pipe.NamedPipeClient.Send(String action, Object[] parameters)
at Docker.Actions.<>c__DisplayClass39_0.<SwitchDaemon>b__0()
at Docker.ApiServices.TaskQueuing.TaskQueue.<>c__DisplayClass18_0.<.ctor>b__1()
Run Code Online (Sandbox Code Playgroud) 我当前的服务在 Windows 上的 IIS 中运行。我让它们作为我的域的一部分的服务帐户用户运行。该用户运行该服务的应用程序池,并且还获得了数据库所需的权限。然后我们的连接字符串就可以使用集成安全性来连接到我们的 SQL Server 数据库。
这样做的好处是可以提前设置,并且代码/连接字符串不需要任何密码。
当我转向 docker 容器时,我发现继续使用这是一个困难的情况。我的容器以 root 或其他非公司用户身份运行。所以我不能只使用集成安全性。(即使我可以让我的容器作为域用户运行,我也不知道这是否是一个好的做法。)
在容器中运行时,如何将密码保留在数据库连接字符串和配置之外?
我现在的情况是:
linux-containers ×10
docker ×9
linux ×2
asp.net-core ×1
deployment ×1
ipv6 ×1
jenkins ×1
lxc ×1
networking ×1
server ×1
ubuntu ×1
windows-10 ×1
xserver ×1