我正在尝试使用Dockerfiles,我想我理解大部分逻辑.但是,我没有看到在这种情况下"暴露"和"发布"端口之间的区别.
我首先看到的所有教程都包含EXPOSE
Dockerfile中的命令:
...
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-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
.
我在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) 我正在尝试在两个数据帧之间进行简单的合并.它们来自两个不同的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) 我刚学习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变量中,并将其作为参数传递给导出的函数.
这在某种程度上感觉像是一种笨拙的做事方式.关于如何更好地处理这个问题的任何想法?
谢谢!
我有一个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) 我有一个使用Docker的部署设置,其工作方式如下:
我想尽快执行这些步骤,但是它们花费了非常长的时间。即使对于中等大小的映像(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。
我有一个看起来像这样的数据框
>>> 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_0
和state_1
。但这只会返回第一个条目:
>>> df2[(df2['state_0'] == 'A') & (df2['state_1'] == …
Run Code Online (Sandbox Code Playgroud) 我有一个典型的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
.这个导致问题的附加设置有什么问题?
谢谢!
我正试图从屏幕移动到tmux(最终从byobu内部使用tmux).但是,我没有应用环境变量的严重问题,尤其是PS1.它们都不会被复制到会话(或窗口)环境中.我发现这个线程看似相关:
但是,当我这样做时,我实际上可以看到所有正确的变量
: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
为什么我没有默认发生这种情况?
假设我有一个常规的"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
可以任意长(深).
我意识到我可以编写另一个遍历函数,但似乎应该有一种直接的方法.有任何想法吗?
我有一个非常大的 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) 我想将以下一系列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 ×9
pandas ×5
docker ×3
django ×2
anaconda ×1
boot2docker ×1
dataframe ×1
datetime ×1
dictionary ×1
django-orm ×1
homebrew ×1
javascript ×1
macos ×1
math ×1
merge ×1
mysql ×1
nan ×1
numpy ×1
performance ×1
recursion ×1
string ×1
tmux ×1
webpack ×1