小编Pro*_*ter的帖子

如何输入已经使用新TTY运行的Docker容器

我有一个在前台运行Apache服务的容器.我希望能够从另一个shell访问容器,以便在其中"查找"并检查文件.目前,如果我附加到容器,我只是看着Apache守护进程,无法运行任何命令.

是否可以将另一个tty附加到正在运行的容器上?可能,我可以利用Docker实际上只是环绕LXC容器这一事实?我试过sudo lxc-console -n [container-id] -t [1-4]但似乎只有一个tty可用,那就是运行apache守护进程的tty.也许有一种方法可以在构建期间启用多个lxc控制台?

如果可能的话,我宁愿使用openssh服务配置和构建容器.

tty docker

501
推荐指数
6
解决办法
35万
查看次数

摇摇欲坠的继承与构成

在我的"简化"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)

swagger

74
推荐指数
3
解决办法
6万
查看次数

Swagger - 指定可选对象属性或多个响应

我有一个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"属性,并将显示以下错误消息: …

swagger

30
推荐指数
1
解决办法
4万
查看次数

Docker - 检查私有注册表映像版本

我需要使用哪些CLI命令来检查我的私有docker注册表中的映像是否比我服务器上当前运行的映像更新?

例如,我有一个我运行的容器 docker run -d my.domain.com:5000/project1

我想知道它是否已经过时了.

deployment docker docker-registry

11
推荐指数
1
解决办法
2万
查看次数

设置Docker Dnsmasq

我正在尝试设置一个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该域时:

  • 主人
  • dnsmasq容器
  • 同一主机上的另一个容器

我总是收到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,或者我试图做的事实际上是不可能的吗?

networking dnsmasq docker

8
推荐指数
1
解决办法
1万
查看次数

Docker Volumes - 自动添加文件

我正在尝试创建一个具有外部卷的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以便在运行容器时自动将文件/文件夹添加到主机安装目录中?

volume docker

8
推荐指数
1
解决办法
4651
查看次数

重新启动后以特定顺序启动Docker容器

上下文

几乎所有的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)

docker

8
推荐指数
1
解决办法
4240
查看次数

表行onclick - 更改页面或打开新选项卡

我有一个包含行的表,在单击时,将用户带到一个页面,其中包含有关该行描述的项目的更多详细信息.不幸的是,它总是会更改当前页面,我们的用户希望能够使用鼠标中键/控件单击行,以便在需要时打开新选项卡.这个选择适用于普通链接,但似乎没有我的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事件模拟普通链接的最佳方法是什么,因此不同操作系统/浏览器的行为将是相同的,我认为这对于触发在新选项卡中打开链接的内容具有不同的绑定.

html javascript onclick href

6
推荐指数
1
解决办法
1万
查看次数

Satis - 指定 SSH 密钥到 git 服务器

我有一个像这样指定的 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

ssh-keys satis

5
推荐指数
1
解决办法
2937
查看次数

MySQL - 检查列值的唯一性

是否可以编写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.

mysql

2
推荐指数
1
解决办法
916
查看次数

/dev/zero 还是安全擦除?

谁能告诉我为什么/是否应该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 命令更好手动覆盖磁盘。

linux erase hard-drive

1
推荐指数
1
解决办法
5654
查看次数

暂时禁用自动加载堆栈

有人可以告诉我是否可以暂时禁用spl_autoloader,然后再启用它,如果是这样,怎么办?或者,如果不可能,有没有办法将自动加载堆栈"拉"到临时变量中,这会导致堆栈停用(当它为空时),然后从该变量重新注册所有内容.

php autoloader

1
推荐指数
1
解决办法
2414
查看次数

PostGIS ST_Distance_Spheroid 或Haversine

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%。

幸运的是,第三个消息来源澄清说他们使用的是半正弦公式。我不确定其他两个来源。

我在查询中做错了什么还是因为使用的公式不同?如果是这样,哪个计算最接近乌鸦可以飞行的最短距离,保持恒定的高度?

postgis haversine

0
推荐指数
1
解决办法
1133
查看次数