我有一个 docker 映像,当我运行它时,我需要将主机 IP 地址作为环境变量传递。所以我需要这样的东西:
docker run --rm -it -e HOST_IP=<?????> -p 8000:8000 image
Run Code Online (Sandbox Code Playgroud)
我在 OS X 上使用 Docker。基本上这个镜像正在运行一个我想要连接到本地 PostgreSQL 服务器的服务。该服务从环境变量中读取服务器主机 IP。
如何获取宿主机的IP供docker使用?
如果我使用本地计算机地址 192.168.99.1 (来自ifconfig),psycopg2 会抱怨:
psycopg2.OperationalError: FATAL: no pg_hba.conf entry for host "192.168.99.100", user "postgres", database "database", SSL off
Run Code Online (Sandbox Code Playgroud)
错误中提到的地址192.168.99.100是我的docker-machine的IP。
我怎样才能获得正确的IP?
我正在尝试运行一个简单的 shell 脚本来自动更改 docker 机器环境。问题是这样的,当我直接在Mac终端中运行以下命令时,输出以下内容:
eval $(docker-machine env default)
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * digitalocean Running tcp://***.**.***.***:**** v1.12.0
Run Code Online (Sandbox Code Playgroud)
基本上正如您所期望的,但是当我运行以下 .sh 脚本时:
#!/usr/bin/env bash
eval $(docker-machine env default)
Run Code Online (Sandbox Code Playgroud)
输出是:
./run.sh
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default digitalocean Running tcp://***.**.***.***:**** v1.12.0
Run Code Online (Sandbox Code Playgroud)
所以基本上,它没有将其设置为活动状态,我无法访问它。
有没有人以前遇到过这个问题并且知道如何解决它?对我来说似乎真的很奇怪,除了这个方面之外,几乎所有其他东西都在运行和自动化。
干杯,亚伦
使用场景是这样的:
我已经使用docker-machine配置了一个 AWS EC2 实例。
我想使用docker-compose远程启动该 EC2 实例上的一些容器。
撰写文件有一个如下部分:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "8888:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /home/ubuntu/nginx.tmpl:/app/nginx.tmpl:ro
Run Code Online (Sandbox Code Playgroud)
如果我docker-compose up -d在本地使用,它会工作,因为“ /home/ubuntu/nginx.tmpl ”文件存在于我的本地计算机上。
但是如果我尝试使用docker-compose来控制 AWS 中的远程守护进程,如下所示:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://x.y:2376"
export DOCKER_CERT_PATH="somedir"
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
它会失败,因为远程计算机中不存在“ /home/ubuntu/nginx.tmpl ”文件。
我试过在远程机器同目录下创建这样的文件,可以用,但是感觉不对……
将本地文件挂载到远程 docker 守护进程的更好方法是什么?
我在云上有本地 docker 机器和远程 docker 机器。我的 docker-compose 应用程序有一个web具有以下配置的容器:
web:
container_name: web
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app/static
- ./data:/usr/src/app/data
env_file: .env
command: /usr/local/bin/gunicorn --workers 4 --timeout 120 --bind :8000 app:app
Run Code Online (Sandbox Code Playgroud)
重要的部分是第二卷。我有一个名为 data 的本地文件夹,其中包含大约 10GB 的数据。我首先将其设为一个卷,因为否则构建容器会花费很长时间。现在该应用程序已准备好投入生产,我想部署它。一个问题:现在我的远程web容器中安装了一个空数据文件夹。那么如何将数据从本地计算机移动到远程 docker 计算机上的容器中呢?我什至要把它移到哪里?
似乎有两个工具可以实现此目的:
docker cp这似乎不适用于远程 docker 机器docker-machine scp这似乎是为此而设计的,对吧?我几乎肯定我需要使用其中的第二个,但由于我不太了解 docker 机器如何工作或它保存数据的位置,我不确定要使用什么目标路径:
$ dm scp -r /Users/alex/Documents/Project/data remote-machine:/usr/src/app/data
Run Code Online (Sandbox Code Playgroud)
失败并显示错误消息:
scp: /usr/src/app/data: No such file or directory
我应该在哪里 scp 处理这些数据,以便将其正确安装在我的远程web容器上?
我在“MAC OSX Yosemite 10.10.5”上安装了 docker CE 及其 ToolBox,当我启动“Docker Quickstart Terminal”时,我收到以下消息,提示正在等待 SSH 可用并要求输入密码。请提出一个解决方案,任何答案都将受到高度赞赏。
PS:类似的问题没有帮助,所以请不要将问题标记为重复
Running pre-create checks...
Creating machine...
(default) Copying /Users/macbookpro/.docker/machine/cache/boot2docker.iso to
/Users/macbookpro/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
Error creating machine: Error in driver during machine creation: Unable to start the VM: /usr/local/bin/VBoxManage startvm default --type headless failed:
VBoxManage: error: The virtual machine 'default' has terminated unexpectedly during startup with exit code …Run Code Online (Sandbox Code Playgroud) 我创建了一个运行 2 个 java 进程的 docker 容器 - 其中一个进程正在侦听端口 4444,并且应该可以通过浏览器访问以下 URL:
http://{主机}:4444/grid/console
如何从主机上的浏览器访问此 URL - 连接到端口 4444 上的容器?
这是 docker 检查的响应:
[
{
"Id": "3bef855324d8c78fcd3a7ac4e52d1641437f221ebe64af5651641d776cfa1bde",
"Created": "2018-02-22T14:54:37.025854258Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 12320,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-02-22T14:54:37.487535484Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:422dc563ca3260ad9ef5c47a1c246f5065d7f177ce51f4dd208efd82967ff182",
"ResolvConfPath": "/var/lib/docker/containers/3bef855324d8c78fcd3a7ac4e52d1641437f221ebe64af5651641d776cfa1bde/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/3bef855324d8c78fcd3a7ac4e52d1641437f221ebe64af5651641d776cfa1bde/hostname",
"HostsPath": "/var/lib/docker/containers/3bef855324d8c78fcd3a7ac4e52d1641437f221ebe64af5651641d776cfa1bde/hosts",
"LogPath": "/var/lib/docker/containers/3bef855324d8c78fcd3a7ac4e52d1641437f221ebe64af5651641d776cfa1bde/3bef855324d8c78fcd3a7ac4e52d1641437f221ebe64af5651641d776cfa1bde-json.log",
"Name": "/hint-env",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "", …Run Code Online (Sandbox Code Playgroud) 我有一个docker-compose开发设置,我需要复制相同的文件以进行生产或登台。
目前,除了volumes ports我environment不太确定生产/环境“可能需要”更改哪些设置。
澄清:
volumes,因为我通常将 USB 驱动器安装到我的 docker 容器 ex:d:/var/wwwports是,因为我的本地计算机上可能有其他服务使用端口 80,所以我可能需要更改它。environment当然,对于生产/开发来说是不同的..(主要是身份验证和数据库访问)如果有更多提示就很高兴知道。
docker dockerfile docker-compose docker-machine container-image
我在 Windows 10 pro 上更新了桌面应用程序的 docker(版本 2.0.0.3)。但从那时起,我的 docker 无法启动并抛出以下错误。
Hyper-V\Get-VMNetworkAdapter : Hyper-V was unable to find a virtual switch with name "DockerNAT".
At C:\Program Files\Docker\Docker\resources\MobyLinux.ps1:121 char:25
+ ... etAdapter = Hyper-V\Get-VMNetworkAdapter -ManagementOS -SwitchName $S ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (DockerNAT:String) [Get-VMNetworkAdapter], VirtualizationException
+ FullyQualifiedErrorId : InvalidParameter,Microsoft.HyperV.PowerShell.Commands.GetVMNetworkAdapter
Run Code Online (Sandbox Code Playgroud)
我按照链接中提到的步骤进行操作(手动删除 Hyper-V 中的 MobyLinuxVM 后,Windows 10 上的 Docker 无法启动),但没有解决问题。
我还尝试禁用 --> 重新启动 --> 然后使用“控制面板\程序\程序和功能”中的“打开或关闭 Windows 功能”启用 Hyper V 和容器选项
但我仍然无法启动我的 Windows Docker 应用程序,它不断抛出异常
Hyper-V was unable to find a …Run Code Online (Sandbox Code Playgroud) 我是 docker 新手,想要容器化我的应用程序的特定 git 分支。如果我运行 docker build 并给出 dockerfile 的位置,将构建一个图像,但默认情况下从本地 master 分支构建。我希望能够要构建另一个分支,请说“开发”。我做了一些研究,我发现的所有答案都建议从特定的远程分支而不是特定的本地分支进行构建。
当我运行时docker-machine ls,无法访问我的 DigitalOcean docker Droplet,并显示错误。
invalid character 'U' looking for beginning of value当运行任何其他docker-machine尝试直接联系 docker 机器的命令时,也会出现同样的错误。
NAME DRIVER STATE DOCKER ERRORS
digitalocean-main digitalocean Error Unknown invalid character 'U' looking for beginning of value
Run Code Online (Sandbox Code Playgroud) docker ×10
docker-machine ×10
boot2docker ×2
macos ×2
bash ×1
dockerfile ×1
git ×1
linux ×1
postgresql ×1
shell ×1
ssh ×1
windows ×1