小编use*_*984的帖子

Docker中"expose"和"publish"有什么区别?

我正在尝试使用Dockerfiles,我想我理解大部分逻辑.但是,我没有看到在这种情况下"暴露"和"发布"端口之间的区别.

我首先看到的所有教程都包含EXPOSEDockerfile中的命令:

...
EXPOSE 8080
...
Run Code Online (Sandbox Code Playgroud)

然后他们从这个Dockerfile构建一个图像:

$ docker build -t an_image - < Dockerfile
Run Code Online (Sandbox Code Playgroud)

然后在运行映像时发布与上面相同的端口:

$ docker run -d -p 8080 an_image
Run Code Online (Sandbox Code Playgroud)

或使用发布所有端口

$ docker run -d -P an_image
Run Code Online (Sandbox Code Playgroud)

暴露Dockerfile中的端口有什么意义,如果它仍然会被发布?是否需要首先公开一个端口,而不是稍后发布它?实际上,我想在创建映像时指定我将在Dockerfile中使用的所有端口,然后再不打扰它们,只需运行它们:

$ docker run -d an_image
Run Code Online (Sandbox Code Playgroud)

这可能吗?

docker

453
推荐指数
5
解决办法
17万
查看次数

停止容器如何运行`docker-compose run`

我正在尝试用来docker-compose编排几个容器.要进行故障排除,我经常最终通过执行以下操作从容器中运行bash:

$ docker-compose run --rm run web bash
Run Code Online (Sandbox Code Playgroud)

我总是尝试传递--rm开关,以便在退出bash会话时删除这些容器.有时虽然,他们仍然存在,我看到它们的输出docker-compose ps.

           Name                          Command                State      Ports
----------------------------------------------------------------------------------
project_nginx_1            /usr/sbin/nginx                  Exit 0
project_nginx_run_1        bash                             Up         80/tcp
project_web_1              python manage.py runserver ...   Exit 128
project_web_run_1          bash                             Up         8000/tcp
Run Code Online (Sandbox Code Playgroud)

此时,我试图手动停止并删除这些组件,但我无法做到这一点.我试过了:

$ docker-compose stop project_nginx_run_1
No such service: project_nginx_run_1
Run Code Online (Sandbox Code Playgroud)

我也尝试了其他命令rm,kill等等.

我该怎么做才能摆脱这些容器?

编辑:

修正了输出docker-compose ps.

docker docker-compose

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

OS X - 在anaconda和自制Python环境之间做出决定

我在Mac OS X上广泛使用Python,用于数值应用程序和Web开发(大致相同).我最近检查了笔记本电脑上的Python安装数量,并惊讶地发现四个:

Came with Mac OS X:
/usr/bin/python
Python 2.7.6 (default, Sep  9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin

Installed via Homebrew
/usr/local/bin/python
Python 2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin

Installed via Anaconda/Miniconda
~/anaconda/bin/python
Python 2.7.10 |Anaconda 2.3.0 (x86_64)| (default, Oct 19 2015, 18:31:17)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Anaconda is brought to you by Continuum Analytics.
Please check out: …
Run Code Online (Sandbox Code Playgroud)

python macos homebrew numpy anaconda

25
推荐指数
2
解决办法
3万
查看次数

pandas - 在字符串列上合并不起作用(bug?)

我正在尝试在两个数据帧之间进行简单的合并.它们来自两个不同的SQL表,其中连接键是字符串:

>>> df1.col1.dtype
dtype('O')
>>> df2.col2.dtype
dtype('O')
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法合并它们:

>>> merge_res = pd.merge(df1, df2, left_on='col1', right_on='col2')
Run Code Online (Sandbox Code Playgroud)

内部联接的结果为空,这首先提示我交集中可能没有任何条目:

>>> merge_res.shape
(0, 19)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试匹配单个元素时,我发现这真的很奇怪.

# Pick random element in second dataframe
>>> df2.iloc[5,:].col2
'95498208100000'

# Manually look for it in the first dataframe
>>> df1[df1.col1 == '95498208100000']
0 rows × 19 columns
# Empty, which makes sense given the above merge result

# Now look for the same value as an integer
>>> df1[df1.col1 == 95498208100000]
1 rows × 19 columns
# FINDS …
Run Code Online (Sandbox Code Playgroud)

python mysql merge pandas

16
推荐指数
3
解决办法
2万
查看次数

如何将Django模板变量传递给WebPack模块

我刚学习WebPack模块,我正在考虑将我的Django应用程序的整个JS基础架构移动到模块.似乎这样做的一种简单方法是为每个Django模板(或视图)创建一个webpack模块,并<script>在每个页面上都有一个标记.

但是,我正在尝试找到一种将Django模板变量的内容传递给这些webpack模块的方法.以前我可以将这些变量内联:

<script>
//Sample code..
var arr = [];
{% for s in vars %}
arr.push(s);
{% endfor %}
</script>
Run Code Online (Sandbox Code Playgroud)

现在,我只有:

<script src="temp.js"></script>
Run Code Online (Sandbox Code Playgroud)

我发现一个可能的解决方案是将webpack模块定义为一个库,它将单个根函数导出到浏览器中的全局命名空间.然后使用内联script标记将Django变量放入JS变量中,并将其作为参数传递给导出的函数.

这在某种程度上感觉像是一种笨拙的做事方式.关于如何更好地处理这个问题的任何想法?

谢谢!

javascript python django webpack

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

将字符串函数应用于可以为NaN的元素

我有一个Pandas DataFrame,其中包含由人类编写的分类数据.我们这样说:

>>> df = pd.DataFrame({'name': ["A", " A", "A ", "b", "B"]})
  name
0    A
1    A
2   A
3    b
4    B
Run Code Online (Sandbox Code Playgroud)

我想通过剥离空格和大写它们来规范化这些值.这非常有效:

>>> df.apply(lambda x: x['name'].upper().strip(), axis=1)
0    A
1    A
2    A
3    B
4    B
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我也有一些nan价值观,而且我有效地希望这些价值nan在这次转型之后仍然存在.但如果我有这个:

>>> df2 = pd.DataFrame({'name': ["A", " A", "A ", "b", "B", np.nan]})
>>> df2.apply(lambda x: x['name'].upper().strip(), axis=1)
("'float' object has no attribute 'upper'", u'occurred at index 5')
Run Code Online (Sandbox Code Playgroud)

我想要的是这个:

0    A
1    A
2    A
3 …
Run Code Online (Sandbox Code Playgroud)

python string pandas

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

Docker push需要很长时间

我有一个使用Docker的部署设置,其工作方式如下:

  1. 通过Dockerfile在我的开发机器上构建映像
  2. 将映像推送到注册表(我尝试了Docker Hub和Quay.io)
  3. 将此映像拉到部署服务器,然后重新启动容器。

我想尽快执行这些步骤,但是它们花费了非常长的时间。即使对于中等大小的映像(750MiB,包括标准ubuntu和朋友),在进行少量修改后,部署也需要17分钟。我优化了项目的顺序Dockerfile,因此实际上大部分时间都可以访问缓存的图像。这似乎没有什么不同。

罪魁祸首是docker push步骤。对于Docker Hub和Quay.io而言,推送图像都花费了不切实际的长时间。在一个简单的基准测试中,我连续执行了docker push两次,因此所有先前的映像都已经在注册表中。所以我只看到这些行:

...
bf84c1d841244f: Image already pushed, skipping
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我按时完成,性能会令人恐怖。当所有图像都已经在服务器上时,推送到Quay.io将需要3.5分钟!推送到Docker Hub大约需要12分钟

显然有些地方出了问题,因为许多人在生产中使用Docker,所以这些时间与持续交付完全相反。

我怎样才能使运行更快?别人也看到这种表演吗?它与注册表服务有关,还是与本地计算机有关?

我在Mac OS X下使用Docker。

performance docker boot2docker

6
推荐指数
2
解决办法
3925
查看次数

熊猫 - 选择一对连续的行匹配条件

我有一个看起来像这样的数据框

>>> a_df
    state
1    A
2    B
3    A
4    B
5    C
Run Code Online (Sandbox Code Playgroud)

我想做的是返回匹配某个序列的所有连续行。例如,如果此序列为['A', 'B'],则应返回状态A后紧跟 a的行B。在上面的例子中:

>>> cons_criteria(a_df, ['A', 'B'])
    state
1    A
2    B
3    A
4    B
Run Code Online (Sandbox Code Playgroud)

或者如果选择的数组是['A', 'B', 'C'],那么输出应该是

>>> cons_criteria(a_df, ['A', 'B', 'C'])
    state
3    A
4    B
5    C
Run Code Online (Sandbox Code Playgroud)

我决定通过存储当前状态以及下一个状态来做到这一点:

>>> df2 = a_df.copy()
>>> df2['state_0'] = a_df['state']
>>> df2['state_1'] = a_df['state'].shift(-1)
Run Code Online (Sandbox Code Playgroud)

现在,我可以匹配state_0state_1。但这只会返回第一个条目:

>>> df2[(df2['state_0'] == 'A') & (df2['state_1'] == …
Run Code Online (Sandbox Code Playgroud)

python math pandas

6
推荐指数
2
解决办法
1508
查看次数

独立Django ORM - 无法识别默认设置

我有一个典型的Django网络应用程序.我想用自己的virtualenv创建一个单独的项目,并利用ORM在DB中创建新条目.

解释如何执行此操作有很多资源,包括来自文档的此条目.所以我写了一个脚本如下:

# Add Django project directory to path, so that I can
# import the models
import sys
sys.path.append("/path/to/django/project")

# Import my settings file from the Django project
from django_proj import settings as django_settings

import django
from django.conf import settings
if not settings.configured:
    settings.configure(django_settings)
django.setup()
Run Code Online (Sandbox Code Playgroud)

当我尝试以这种方式运行时,我收到以下错误:

AttributeError: 'module' object has no attribute 'LOGGING_CONFIG'
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我没有LOGGING_CONFIG在我的设置中明确指定.我依赖默认值.

当我通过它运行时,我的配置显然有效python manage.py.这个导致问题的附加设置有什么问题?

谢谢!

python django django-models django-orm

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

tmux - 环境变量不会出现在会话中

我正试图从屏幕移动到tmux(最终从byobu内部使用tmux).但是,我没有应用环境变量的严重问题,尤其是PS1.它们都不会被复制到会话(或窗口)环境中.我发现这个线程看似相关:

如何在当前环境下启动tmux?

但是,当我这样做时,我实际上可以看到所有正确的变量

:show-environment -g
Run Code Online (Sandbox Code Playgroud)

但是没有一个被转移到会话环境中,所以当我这样做时我什么都看不到

:show-environment
Run Code Online (Sandbox Code Playgroud)

update-environment我的~/.tmuxrc文件中有正确的陈述:

# start a non-login shell by default for each new window
set -g default-command 'bash'

# Prefix is C-a like in screen
unbind C-b
set -g prefix C-a

# Carry over the PS1
set-option -ga update-environment "PS1"
Run Code Online (Sandbox Code Playgroud)

坦率地说,这一切对我来说都是一团糟.我可以看到从每个屏幕的干净会话开始的好处,但在大多数情况下,这似乎很痛苦.我导出我打算在子进程中使用的变量,例如Python virtualenvwrapper函数,并期望它们可用.

有没有办法禁用这种行为?如果没有,我应该尝试将我的PS1变量转移到tmux?

编辑11/13/2013

我意识到删除第一行(default-command bash)确实会携带所有环境变量.但是,我真的不希望每个新的tmux屏幕作为登录shell启动.例如,我在登录shell中专门声明了我的PS1变量,因此每当我打开一个新屏幕时它都不会被覆盖.

根据以下帖子,tmux中的每个新屏幕都应作为非登录shell启动:https: //superuser.com/questions/614277/profile-and-bash-profile-ignored-when-starting-tmux-from-在.bashrc

为什么我没有默认发生这种情况?

tmux

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

Python - 从键列表中访问分层dict元素

假设我有一个常规的"dict-of-dicts"如下:

d = {}
d['a'] = {}
d['a']['b'] = 3
Run Code Online (Sandbox Code Playgroud)

我当然可以使用它来访问元素d['a']['b'].

在我的例子中,我有一个递归应用程序,在其中我将当前状态保持为键列表.所以我会的

my_key = ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

如何使用my_key?访问值3 ?当然,问题在于my_key可以任意长(深).

我意识到我可以编写另一个遍历函数,但似乎应该有一种直接的方法.有任何想法吗?

python recursion dictionary

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

对无法使用 astype 进行转换的值使用 NaN

我有一个非常大的 Pandas DataFrame,如下所示:

>>> d = pd.DataFrame({"a": ["1", "U", "3.4"]})
>>> d
     a
0    1
1    U
2  3.4
Run Code Online (Sandbox Code Playgroud)

目前该列设置为object

>>> d.dtypes
a    object
dtype: object
Run Code Online (Sandbox Code Playgroud)

我想将此列转换为浮动,以便我可以使用groupby()和计算平均值。当我尝试使用它时,astype我正确地收到错误,因为字符串无法转换为浮动:

>>> d.a.astype(float)
ValueError: could not convert string to float: 'U'
Run Code Online (Sandbox Code Playgroud)

我想做的是将所有元素投射到浮动,然后替换那些不能被 NaN 投射的元素。

我怎样才能做到这一点?

我尝试设置raise_on_error,但它不起作用,dtype仍然是object.

>>> d.a.astype(float, raise_on_error=False)
0      1
1      U
2    3.4
Name: a, dtype: object
Run Code Online (Sandbox Code Playgroud)

python nan dataframe pandas

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

转换Pandas时间序列:UNIX epoch到datetime

我想将以下一系列UNIX纪元转换为常规日期时间对象:

>> val = pd.Series(["1440643875", "1440644191", "1440645638", "1440998720"])
>> val
0    1440643875
1    1440644191
2    1440645638
3    1440998720
Name: obj, dtype: object
Run Code Online (Sandbox Code Playgroud)

似乎有两种方法可以做到这一点.首先是:

>> pd.to_datetime(val, unit='s')
ValueError: year is out of range
Run Code Online (Sandbox Code Playgroud)

第二个:

val.astype("datetime64[s]")
TypeError: Cannot parse "1445124547" as unit 's' using casting rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)

这里似乎有什么问题?

我还尝试使用"在线时代计算器"工具检查这些时间戳,并给出合理的答案.

python datetime pandas

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