TLDR; демон docker хранит список контейнеров в памяти. На docker ps
доступ к файловой системе не требуется. На docker create/run/start
список контейнера может быть получен из слоя, найденного в /var/lib/docker/aufs
(если вы используете драйвер хранения aufs )
Сами контейнеры находятся под /var/lib/docker/containers/{id}
. Как не разрешено вопросом 15047 , этот путь загружается, когда запускается демон docker. После этого он управляется в памяти.
docker ps
запрашивает контейнеры в api/client/ps.go#L59
:
containers, err := cli.client.ContainerList(options)
Он запрашивает api/client/lib/container_list.go#L45
resp, err := cli.get("/containers/json", query, nil)
Это управляется в api/server/router/container/container.go#L34
local.NewGetRoute("/containers/json", r.getContainersJSON),
It затем запрашивает бэкэнд в api/server/router/container/container_routes.go#L48
containers, err := s.backend.Containers(config)
. Каков интерфейс в api/server/router/container/backend.go#L58
Containers(config *daemon.ContainersConfig) ([]*types.Container, error)
, реализованный демоном докеров в daemon/list.go#L83-L86
:
// Containers returns the list of containers to show given the user's filtering.
func (daemon *Daemon) Containers(config *ContainersConfig) ([]*types.Container, error) {
return daemon.reduceContainers(config, daemon.transformContainer)
}
Демон имеет список контейнеров: daemon/list.go#L37-L40
// List returns an array of all containers registered in the daemon.
func (daemon *Daemon) List() []*container.Container {
return daemon.containers.List()
}
Из contStore
: daemon/daemon.go#L123-L132
func (c *contStore) List() []*container.Container {
containers := new(History)
c.Lock()
for _, cont := range c.s {
containers.Add(cont)
}
c.Unlock()
containers.sort()
return *containers
}
type contStore struct {
s map[string]*container.Container
sync.Mutex
}
Aspx
<ajax:ModalPopupExtender runat="server" ID="modalPop"
PopupControlID="pnlpopup"
TargetControlID="btnGo"
BackgroundCssClass="modalBackground"
DropShadow="true"
CancelControlID="btnCancel" X="470" Y="300" />
//Codebehind
protected void OkButton_Clicked(object sender, EventArgs e)
{
modalPop.Hide();
//Do something in codebehind
}
И не устанавливайте для кнопки OK значение OkControlID.
Кажется, что кнопка, которая используется в качестве OK или Кнопки отмены для ModalPopupExtender, не может иметь события щелчка. Я проверил это путем удаления
OkControlID="ModalOKButton"
от тега ModalPopupExtender и огней нажатия кнопки. Я должен буду выяснить другой способ отправить данные на сервер.
Я просто искал решение для этого:)
кажется, что Вы не можете иметь , OkControlID присваивает управлению, если Вы хотите к тем огням управления событие, просто удалив это свойство я получил все работающее снова.
мой код (работа):
<asp:Panel ID="pnlResetPanelsView" CssClass="modalPopup" runat="server" Style="display:none;">
<h2>
Warning</h2>
<p>
Do you really want to reset the panels to the default view?</p>
<div style="text-align: center;">
<asp:Button ID="btnResetPanelsViewOK" Width="60" runat="server" Text="Yes"
CssClass="buttonSuperOfficeLayout" OnClick="btnResetPanelsViewOK_Click" />
<asp:Button ID="btnResetPanelsViewCancel" Width="60" runat="server" Text="No" CssClass="buttonSuperOfficeLayout" />
</div>
</asp:Panel>
<ajax:ModalPopupExtender ID="mpeResetPanelsView" runat="server" TargetControlID="btnResetView"
PopupControlID="pnlResetPanelsView" BackgroundCssClass="modalBackground" DropShadow="true"
CancelControlID="btnResetPanelsViewCancel" />
Ни один из предыдущих ответов не работал на меня. Я назвал обратную передачу кнопки на событии OnOkScript.
<div>
<cc1:ModalPopupExtender PopupControlID="Panel1"
ID="ModalPopupExtender1"
runat="server" TargetControlID="LinkButton1" OkControlID="Ok"
OnOkScript="__doPostBack('Ok','')">
</cc1:ModalPopupExtender>
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
</div>
<asp:Panel ID="Panel1" runat="server">
<asp:Button ID="Ok" runat="server" Text="Ok" onclick="Ok_Click" />
</asp:Panel>
Также могло случиться так, что кнопка должна иметь CausesValidation = "false". У меня это сработало.
Поместите в Button-Control атрибут "UseSubmitBehavior=false".