在Docker文件中,我使用wget下载图像中的文件。但是当我在docker-compose文件中使用此图像时,容器不包含文件...
FROM debian:8
RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /blast && cd /blast
RUN wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.6.0+-x64-linux.tar.gz
RUN tar zxvpf ncbi-blast-2.6.0+-x64-linux.tar.gz && rm ncbi-blast-2.6.0+-x64-linux.tar.gz
RUN export PATH=$PATH:/blast/ncbi-blast-2.6.0+/bin
#&& export BLASTDB=/blast/blastdb
CMD ["sleep", "infinity"]
Run Code Online (Sandbox Code Playgroud)
在容器中,我有/ blast文件夹,但没有文件...有人知道我可以执行wget并保留文件吗?为什么它们消失了?
编辑
码头工人的历史
IMAGE CREATED CREATED BY SIZE COMMENT
13361cc1dda8 9 minutes ago /bin/sh -c #(nop) CMD ["sleep" "infinity"] 0 B
748afb9b0a0a 9 minutes ago /bin/sh -c #(nop) WORKDIR /blast 0 B
6eb2b58af7d4 9 minutes ago /bin/sh -c …Run Code Online (Sandbox Code Playgroud) 当我注册一个新的质粒实体时,我想给他一个自动名称(如:p0001,p0002,p0003),为此,我需要在数据库中选择特定用户的最后一个质粒实体,获取其autoName,以及使用此以前的名称来定义新名称.
但是,当我在我的监听器中注入token_storage时,令牌为空...在控制器中,我可以拥有用户,这是有效的.
service.yml
app.event_listener.plasmid:
class: AppBundle\EventListener\PlasmidListener
arguments: ["@security.token_storage"]
tags:
- { name: doctrine.event_listener, event: prePersist }
Run Code Online (Sandbox Code Playgroud)
并且,PlasmidListener
class PlasmidListener
{
private $user;
public function __construct(TokenStorage $tokenStorage)
{
$this->user = $tokenStorage->getToken()->getUser();
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
// If the entity is not a Plasmid, return
if (!$entity instanceof Plasmid) {
return;
}
// Else, we have a Plasmid, get the entity manager
$em = $args->getEntityManager();
// Get the last plasmid Name
$lastPlasmid = $em->getRepository('AppBundle:Plasmid')->findLastPlasmid($this->user);
// Do something …Run Code Online (Sandbox Code Playgroud) 当我这样做时,我有一个问题就是无法正确地使用array_values:
$array[] = 'data1'; // I want [0 => 'data1']
unset($array[0]); // I want []
$array = array_values($array); // I want [] but keys resetted
$array[] = 'data2'; // I want [0 => 'data2']
$array[] = 'data3'; // I want [0 => 'data2', 1 => 'data3']
dump($array);
Run Code Online (Sandbox Code Playgroud)
我的结果是:
array:2 [?
1 => "data2"
2 => "data3"
]
Run Code Online (Sandbox Code Playgroud)
但我想要:
array:2 [?
0 => "data2"
1 => "data3"
]
Run Code Online (Sandbox Code Playgroud)
也许有人可以向我解释一下?因为我有点失落: - /
例如,如果我有一个包含10个值的数组,则删除第3个值,然后执行array_valueson,它运行良好.
但是,如果我从数组中删除最后一个值,那么当我执行array_value时,我添加的下一个值始终为id 1而不是0.
我使用 php:7-fpm 图像,我想安装并使用 Supervisor,在后台运行一些 PHP 脚本(rabbitmq 工作人员)。
\n\n我可以轻松安装 Supervisor、创建 conf 文件并将其添加到映像中。但是,我不知道如何在容器启动时启动它。如果我用 Supervisor 替换 que CMD,则 php-fpm 不会启动。在 docker 库中的 php-fpm dockerfile 的末尾,他们使用CMD ["php-fpm"],我尝试将其添加到我的主管 conf 中,并使用CMD /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf,它启动主管和一个简单的 php 服务。但这不起作用。
我们可以使用很多CMD吗?或者有什么简单的解决办法吗?
\n\n非常感谢你的帮助。
\n\n我的 Dockerfile:
\n\nFROM php:7.1.5-fpm\n\n############################\n# Install PHP requirements #\n############################\n\n# Install wget, git and libraries needed by php extensions\nRUN apt-get update && \\\n apt-get install -y \\\n zlib1g-dev \\\n wget \\\n git \\\n supervisor\n\n# Remove lists\nRUN rm -rf /var/lib/apt/lists/*\n\n#\xc2\xa0Compile ICU …Run Code Online (Sandbox Code Playgroud) 我做了一项运行繁重任务的服务,这个服务是在Controller中调用的.为了避免过长的页面加载,我希望返回HTTP响应并在之后运行繁重的任务.
我读过我们可以使用kernel.terminate事件来做,但我不明白如何使用它.
目前我尝试在KernelEvent上执行一个监听器:TERMINATE,但我不知道如何过滤,因为监听器只在好页面上执行作业...
是否可以在触发事件时添加要执行的函数?然后在我的控制器中,我使用该函数添加我的动作,Symfony稍后执行它.
谢谢你的帮助.
我搜索是否有一种简单的方法允许每个帐户仅使用 Symfony 3 进行一次会话?
目前,我使用PdoSessionHandler将会话存储在数据库中,并且我有一个该onSecurityInteractiveLogin事件的侦听器。当用户登录时,我在 User 对象中设置 sessionId,并将其保存在数据库中。
现在,我想做:当用户成功登录时,我也停用前一个会话,但是如何停用其他会话?在 Symfony 中,我可以为实际会话执行此操作,但不能为其他会话执行此操作...
否则,也许我可以处理 SQL 请求来删除先前的会话,但是随后,先前的用户丢失了会话中存储的所有内容,我只想断开他的连接。
另一种方法是相反的:对新用户说:“会话实际上是通过您的登录打开的,请断开与另一台计算机的连接。”,但如果用户只是关闭浏览器(不单击注销)并返回一些秒/分钟后使用记住我令牌,例如,他无法登录......并且必须等待几分钟。
如果有人有想法?