我有一个在前台运行Apache服务的容器.我希望能够从另一个shell访问容器,以便在其中"查找"并检查文件.目前,如果我附加到容器,我只是看着Apache守护进程,无法运行任何命令.
是否可以将另一个tty附加到正在运行的容器上?可能,我可以利用Docker实际上只是环绕LXC容器这一事实?我试过sudo lxc-console -n [container-id] -t [1-4]但似乎只有一个tty可用,那就是运行apache守护进程的tty.也许有一种方法可以在构建期间启用多个lxc控制台?
如果可能的话,我宁愿不使用openssh服务配置和构建容器.
在我的"简化"API中,所有响应都是从基础"响应"类派生(继承)的.响应类由填充元数据的标头和包含用户请求的核心数据的主体组成.响应(在JSON中)的布局使得所有元数据都在第一个"层"上,而主体是一个称为"body"的单个属性,因此
response
|--metadata attribute 1 (string/int/object)
|--metadata attribute 2 (string/int/object)
|--body (object)
|--body attribute 1 (string/int/object)
|--body attribute 2 (string/int/object)
Run Code Online (Sandbox Code Playgroud)
我试图使用以下JSON在swagger中定义这种关系:
{
...
"definitions": {
"response": {
"allOf": [
{
"$ref": "#/definitions/response_header"
},
{
"properties": {
"body": {
"description": "The body of the response (not metadata)",
"schema": {
"$ref": "#/definitions/response_body"
}
}
}
}
]
},
"response_header": {
"type": "object",
"required": [
"result"
],
"properties": {
"result": {
"type": "string",
"description": "value of 'success', for a …Run Code Online (Sandbox Code Playgroud) 我有一个API,要么成功返回以下响应:
{
"result": "success",
"filename": "my-filename.txt"
}
Run Code Online (Sandbox Code Playgroud)
失败后如下:
{
"result": "error",
"message": "You must specify the xxx parameter."
}
Run Code Online (Sandbox Code Playgroud)
仅当请求成功时才指定filename属性,但如果出现错误则提供消息.这意味着消息和文件名属性是"可选的",但结果属性是必需的.
我尝试在定义中定义此响应对象,如下所示:
"my_response_object": {
"type": "object",
"properties": {
"result": {
"type": "string",
"description": "value of 'success' or 'error', indicated whether was successful",
"required": true
},
"message": {
"type": "string",
"description": "an error message if there was an issue",
"required": false
},
"filename": {
"type": "string",
"description": "the filename to return if the request was successful",
"required": false
}
}
}
Run Code Online (Sandbox Code Playgroud)
但似乎swagger不喜欢"required"属性,并将显示以下错误消息: …
我需要使用哪些CLI命令来检查我的私有docker注册表中的映像是否比我服务器上当前运行的映像更新?
例如,我有一个我运行的容器 docker run -d my.domain.com:5000/project1
我想知道它是否已经过时了.
我正在尝试设置一个docker dnsmasq容器,以便我可以让所有的docker容器查找域名,而不是使用硬编码的IP(如果它们位于同一主机上).这解决了一个问题,即无法改变docker容器中的/ etc/hosts文件,这使我可以通过更改dnsmasq容器引用的单个文件,轻松地一次性更新所有容器.
看起来有人已经为我完成了艰苦的工作并创建了一个dnsmasq容器.不幸的是,它对我来说并不"有效".我写了一个bash脚本来启动容器,如下所示:
name="dnsmasq_"
timenow=$(date +%s)
name="$name$timenow"
sudo docker run \
-v="$(pwd)/dnsmasq.hosts:/dnsmasq.hosts" \
--name=$name \
-p='127.0.0.1:53:5353/udp' \
-d sroegner/dnsmasq
Run Code Online (Sandbox Code Playgroud)
在运行之前,我创建了dnsmasq.hosts目录并在其中插入了一个名为hosts.txt的文件,其中包含以下内容:
192.168.1.3 database.mydomain.com
Run Code Online (Sandbox Code Playgroud)
不幸的是,每当我尝试从内部ping该域时:
我总是收到ping: unknown host错误消息.
我尝试启动没有守护进程模式的dnsmasq容器,所以我可以调试它的输出,如下所示:
dnsmasq: started, version 2.59 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n DHCP TFTP conntrack IDN
dnsmasq: reading /etc/resolv.dnsmasq.conf
dnsmasq: using nameserver 8.8.8.8#53
dnsmasq: read /etc/hosts - 7 addresses
dnsmasq: read /dnsmasq.hosts//hosts.txt - 1 addresses
Run Code Online (Sandbox Code Playgroud)
我猜我-p在启动容器时没有正确指定参数.有人可以告诉我其他docker容器应该查找DNS,或者我试图做的事实际上是不可能的吗?
我正在尝试创建一个具有外部卷的docker容器,该容器应包含多个文件夹,因此我的Dockerfile简化版本如下所示:
FROM ubuntu:12.04
# Create a volume for externally stored data that will persist across containers.
VOLUME ["/uploads"]
# Add the subfolders we need if they dont already exist
# however this never works.
RUN mkdir /uploads/folder1
RUN mkdir /uploads/folder2
Run Code Online (Sandbox Code Playgroud)
每当我启动容器时
sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash
Run Code Online (Sandbox Code Playgroud)
/ uploads文件夹不包含folder1或folder2.但是,如果我用它替换VOLUME上传行,RUN mkdir /uploads它可以使用此命令
sudo docker run -i -t [IMAGE ID] /bin/bash
Run Code Online (Sandbox Code Playgroud)
但不能使用此命令(文件夹再次丢失):
sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash
Run Code Online (Sandbox Code Playgroud)
如何设置dockerfile以便在运行容器时自动将文件/文件夹添加到主机安装目录中?
几乎所有的docker容器都是在端口80上运行的Web应用程序.为了允许它们在单个主机上运行,我允许docker分配一个随机的未使用端口,并使用jwilder/nginx-proxy(reference)作为反向代理.这需要在容器启动之前运行jwilder/nginx-proxy,这在我运行的bash脚本中很容易在构建之后启动容器:
...
#######################
# ensure that we are running the frontend proxy
# which allows us to run multiple web containers
RESULT=`docker ps | grep jwilder | wc -l`
if [ $RESULT -gt 0 ];then
echo "found frontend proxy."
else
echo "Deploying frontend proxy"
docker run -d \
-p 80:80 \
-v /var/run/docker.sock:/tmp/docker.sock \
-t jwilder/nginx-proxy
fi
#######################
# Now start the container.
docker run -d \
-e VIRTUAL_HOST=$VIRTUAL_HOST \
-p 80 \ …Run Code Online (Sandbox Code Playgroud) 我有一个包含行的表,在单击时,将用户带到一个页面,其中包含有关该行描述的项目的更多详细信息.不幸的是,它总是会更改当前页面,我们的用户希望能够使用鼠标中键/控件单击行,以便在需要时打开新选项卡.这个选择适用于普通链接,但似乎没有我的onclick.一个例子如下所示:
<html>
<body>
<table border='1'>
<tr onclick='window.open("http://www.google.com")'>
<td>Open Another Window</td>
</tr>
<tr onclick='location.href="http://www.google.com"'>
<td>Change Current Page</td>
</tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
使用onclick事件模拟普通链接的最佳方法是什么,因此不同操作系统/浏览器的行为将是相同的,我认为这对于触发在新选项卡中打开链接的内容具有不同的绑定.
我有一个像这样指定的 satis.json 文件:
{
"name": "My organizations Satis Server",
"homepage": "http://satis.mydomain.org",
"repositories": [
{
"type": "vcs",
"url": "git@git.mydomain.org:/home/git/packages/MyPackage",
"options": {
"ssh2": {
"username": "git",
"pubkey_file": "/config/public-key.pub",
"privkey_file": "/config/private-key"
}
}
},
...
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过运行以下命令来让 satis 更新:
/usr/bin/php /path/to/satis/satis -n build /path/to/satis.json /path/to/location
Run Code Online (Sandbox Code Playgroud)
这将完全忽略我指定了公钥文件和私钥文件的事实,并继续要求我输入密码。如果我每次都手动输入密码。如果我将 ssh 密钥移动到.ssh/id_rsa并.ssh/id_rsa.pub删除选项参数,那么它也可以工作。
如何为每个 repo 正确指定密钥文件,以便我可以对不同的存储库使用不同的密钥,而不是依赖一个密钥 .ssh/id_rsa
是否可以编写MySQL查询来检查列组合的"单一性"?
目前我一直在尝试在phpmyadmin中的列上创建唯一键并查看它是否失败,这是因为很多原因并不理想.
查询可以允许我查找在这些列中具有重复值的行,或甚至计算导致组合不唯一的行数.知道有多少不同的重复值集也是很好的.
检查列b,c的示例
a|b|c
-----
1|2|3
4|1|3
1|2|9
Run Code Online (Sandbox Code Playgroud)
即使两个值在b中相同且两个值在c中相同,也没有返回上面的行.
a|b|c
-----
1|2|3
4|5|6
7|2|3
7|5|6
Run Code Online (Sandbox Code Playgroud)
将返回所有行,或者查询可以返回集2 | 3和5 | 6.
谁能告诉我为什么/是否应该dd if=/dev/zero of=path/to/file在驱动器上使用而不是内置安全擦除?
根据我的理解,将 0 写入整个驱动器及其实际增强的安全擦除,根据驱动器制造商可能指定的任何内容将“模式”实际写入驱动器。
我也明白安全擦除是一个在硬盘驱动器上运行的“固件”过程,不会使用我计算机 CPU 的资源?(如果我一次擦除 24 个驱动器可能很重要)
如果断电或驱动器在擦除过程中被拔出(热插拔),dd 是否比安全擦除更不容易引起问题?使用安全擦除,驱动器是否会被锁定并可以使用相同的密码再次解锁?该过程是否会自动再次启动并必须在驱动器再次可用之前完成?
问候, 斯图
2012 年 10 月 5 日更新
我在家用电脑上运行了一些测试,发现在安全擦除过程中拉出驱动器似乎不会引起任何问题,唯一需要的额外步骤是发出 hdparm 请求来解锁它. 快速格式化驱动器,它可以再次使用,没有损坏。我还发现,在 CPU 保持在 1% 或更低的情况下,它似乎根本不使用任何计算机资源。
有很多关于在单次传递 0 后数据是否可以恢复的评论,虽然这些信息很有趣/有用,但一次传递 0 对我来说就足以达到这个目的,因为没有其他人会进行物理访问到驱动器,只能通过 ssh 访问具有驱动器的机器。
如果有人能找到我应该使用 dd /dev/zero 命令而不是安全擦除的任何原因,请告诉我,否则我将假设在这些测试的结果之后,安全擦除在各个方面都比使用 dd 命令更好手动覆盖磁盘。
有人可以告诉我是否可以暂时禁用spl_autoloader,然后再启用它,如果是这样,怎么办?或者,如果不可能,有没有办法将自动加载堆栈"拉"到临时变量中,这会导致堆栈停用(当它为空时),然后从该变量重新注册所有内容.
我ST_Distance_Spheroid在 PostgreSQL(使用 Postgis)中使用来计算沃金和爱丁堡之间的距离,如下所示:
CREATE TABLE pointsTable (
id serial NOT NULL,
name varchar(255) NOT NULL,
location Point NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO pointsTable (name, location) VALUES
( 'Woking', '(51.3168, -0.56)' ),
( 'Edinburgh', '(55.9533, -3.1883)' );
SELECT ST_Distance_Spheroid(geometry(a.location), geometry(b.location), 'SPHEROID["WGS 84",6378137,298.257223563]')
FROM pointsTable a, pointsTable b
WHERE a.id=1 AND b.id=2;
Run Code Online (Sandbox Code Playgroud)
我得到了 592 公里(592,053.100454442 米)的结果。
不幸的是,当我使用网络上的各种来源进行相同的计算时,我始终在 543 公里附近,相差 8.2%。
幸运的是,第三个消息来源澄清说他们使用的是半正弦公式。我不确定其他两个来源。
我在查询中做错了什么还是因为使用的公式不同?如果是这样,哪个计算最接近乌鸦可以飞行的最短距离,保持恒定的高度?
docker ×5
swagger ×2
autoloader ×1
deployment ×1
dnsmasq ×1
erase ×1
hard-drive ×1
haversine ×1
href ×1
html ×1
javascript ×1
linux ×1
mysql ×1
networking ×1
onclick ×1
php ×1
postgis ×1
satis ×1
ssh-keys ×1
tty ×1
volume ×1