我正在对旧版PHP项目进行Dockerizing。我想在开发环境中启用Xdebug,我的Dockerfile将预先构建的php.ini复制到容器中。
由于某些网络问题,我们必须在Mac OS X(和相应的xdebug.remote_connect_back = 0
)上安装xdebug.remote_host = docker.for.mac.localhost
,在Linux上安装xdebug.remote_connect_back = 1
。
是否可以在Dockerfile / Docker Compose中获取当前操作系统类型以复制与主机操作系统相对应的php.ini?
答案 0 :(得分:1)
在volumes
中使用docker-compose.yml
described here。在php.linux.ini
文件夹(或任意位置)中创建php.mac.ini
和config
,并将其中之一映射到容器:
services:
php:
image: php
volumes:
- ./config/php.linux.ini:/etc/php.ini #or wherever the config is
当然,您的用户必须手动将php.linux.ini
更改为php.mac.ini
,但这是一次手动更改。
答案 1 :(得分:0)
在图像生成时该信息不可用(也不应该)。可以在本地Linux,Mac上的Linux VM(然后是Docker Machine VM或Docker for Mac提供的隐藏VM),Windows上的Linux VM甚至Linux上的Linux VM上运行相同的基于Linux的映像,而不管它最初是在哪里建造的。
诸如主机名之类的配置应在容器运行时提供。环境变量是执行此操作的典型方法,或者您可以使用Docker卷机制从主机推送配置文件。
如果您的问题完全是关于调试您的应用程序的,则您还可以在主机上设置完整的开发环境,并且仅将所需的内容内置到映像中,以便在其他环境中运行它。生产环境。
答案 2 :(得分:0)
我决定使用Docker Compose功能来读取extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
let center = getCenterLocation(for: mapView)
let geoCoder = CLGeocoder()
guard let previousLocation = self.previousLocation else { return }
guard center.distance(from: previousLocation) > 50 else { return }
self.previousLocation = center
geoCoder.reverseGeocodeLocation(center) { [weak self] (placemarks, error) in
guard let self = self else { return }
if let _ = error {
//TODO show alert informing the user
return
}
guard let placemark = placemarks?.first else {
//TODO Show alert informing the user
return
}
let streetNumber = placemark.subThoroughfare ?? ""
let streetName = placemark.thoroughfare ?? ""
DispatchQueue.main.async {
self?.addressLabel.text = "\(streetNumber) \(streetName)"
}
}
}
}
文件。整个工作流程如下:
.env
通过在.env.sample
文件中添加
OS=windows
OS=linux
OS=mac
行来忽略.env
文件
使用/.env
复制示例文件,仅注释与您的操作系统相对应的一行
将php.ini的特定于操作系统的Xdebug相关部分移动到名称分别为.gitignore
,$ cp .env.sample .env
,xdebug-mac.ini
等的单独文件中。
添加到xdebug-windows.ini
xdebug-linux.ini
部分中,以选定的服务,其值类似于docker-compose.yml
在相应的args
中添加以下行:
- OS=${OS}
Dockerfile
中提到的OS值将在构建映像时间上扩展
执行
ARG OS=${OS}
COPY ./xdebug-${OS}.ini /usr/local/etc/php/conf.g/
以构建映像并启动容器
成功提交所有更改,以使您的同事可以在任何平台上正确设置Xdebug;不要忘记告诉他们从模板制作.env
文件的实例